我用切换按钮编写了一个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方法...
答案 0 :(得分: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) {
...
}
});
}
答案 1 :(得分:0)
在第一次选择切换按钮后,您似乎正在设置点击监听器,这解释了您获得的行为。
移动代码以将侦听器设置在nameOfMethod()之外,它应该可以工作。
编辑:抱歉如果我不清楚,只需从nameOfMethod()中删除setOnClickListener方法即可。 nameOfMethod()是每次选择切换按钮时都会调用的内容,因此每次触摸时都设置一个监听器是没有意义的。这就是为什么你会遇到这种不寻常的行为。
相反,在您的nameOfMethod()中,只需前进并根据toggleButton的状态设置条件
if(toggleButton.isSelected()){
..........
{
else
.......