切换按钮不'我第一次在安卓系统上工作

Toggle button doesn't work at the first time on Android

本文关键字:系统 工作 第一次 按钮      更新时间:2023-09-26

我写了一个带有切换按钮的Android应用程序,但切换按钮第一次工作不好。但在取消检查后,如果你再试一次,它在那之后就正常工作了。

我在下面列出了我的代码。

我必须添加哪些代码才能首次激活它?

public class MainActivity extends Activity{
private ToggleButton togg;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    togg = (ToggleButton) findViewById(R.id.toggleButton1);
    }
public void nameOfMethod(View v){
    togg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (togg.isChecked()) {
                //Toast.makeText(MainActivity.this, "Servise bağlanılıyor...", Toast.LENGTH_SHORT).show();
                new Thread(new ClientThread()).start();
            } else {
                Toast.makeText(MainActivity.this, "Bağlantı sonlandırılıyor...", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

在.xml文件中:

<ToggleButton
    android:id="@+id/toggleButton1"
    android:layout_width="120dp"
    android:layout_height="60dp"
    android:layout_below="@+id/textView1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="20dp"
    android:onClick="nameOfMethod"
    android:textOn="Bağlantıyı bitir"
    android:textOff="Bağlantıyı başlat" />

编辑:它就像那样工作:

public class MainActivity extends Activity{
private ToggleButton togg;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    togg = (ToggleButton) findViewById(R.id.toggleButton1);
    togg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (togg.isChecked()) {
                //Toast.makeText(MainActivity.this, "Servise bağlanılıyor...", Toast.LENGTH_SHORT).show();
                new Thread(new ClientThread()).start();
            } else {
                Toast.makeText(MainActivity.this, "Bağlantı sonlandırılıyor...", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

将setOnClickListener方法移动到onCreate(Bundle savedInstanceState)并删除.xml文件中的android:OnClick方法。。。

您应该在xml或代码中设置切换按钮的检查状态。

Xml

android:checked="true"

或代码:

togg = (ToggleButton) findViewById(R.id.toggleButton1);
togg.setChecked(true);

否则,您可以使用

togg.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // TODO
    }
});

而不是OnClickListener()。

如果你仍然想使用OnClickListener,这是可以的,但记住把它放在Create上,而不是放在nameOfMethod中。(或者记住onCreate中的调用名称OfMethod)

把它放在创建:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    togg = (ToggleButton) findViewById(R.id.toggleButton1);
    togg.setChecked(false);
    togg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        ...
        }
    });
}

在第一次选择切换按钮后,您似乎正在设置您的点击侦听器,这解释了您得到的行为。

将代码移动到nameOfMethod()之外以设置侦听器,它应该可以工作。

编辑:对不起,如果我不清楚,只需从你的nameOfMethod()中删除setOnClickListener方法。nameOfMethod()是每次选择切换按钮时都会调用的名称,因此每次触摸监听器时都设置它是没有意义的。。这就是为什么你会有如此不同寻常的行为。

相反,在你的名字OfMethod()中,直接前进,根据toggleButton 的状态设置你的条件

if(toggleButton.isSelected()){
  ..........
{
else
.......