0

我写了一个带有切换按钮的 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 方法...

4

2 回答 2

0

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

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

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

相反,在您的 nameOfMethod() 中,直接根据 toggleButton 的状态设置您的条件

if(toggleButton.isSelected()){

  ..........

{

else

.......
于 2013-08-27T16:32:04.753 回答
0

您应该在 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 就可以了,但记得把它放在 onCreate 中,而不是放在 nameOfMethod 中。(或者记得在onCreate中调用nameOfMethod)

把它放在创建:

@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) {
        ...
        }
    });
}
于 2013-08-27T16:32:03.853 回答