所以我之前有一个版本。不幸的是,我忘记将工作版本复制到我的USB上,所以我试图在家中复制它。我有5个方向单选按钮。每次检查一个时,都应该更改TextView中的文本以与相关的方向相对应。不幸的是,这似乎不起作用。尝试运行应用程序时,它会崩溃。
调试屏幕也会抛出有关空指针异常的内容。此外,在单选按钮的xml代码中,有一些关于我在Main中找不到的方法。任何帮助表示赞赏。
<RadioButton
android:text="@string/north"
android:layout_width="79dp"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginStart="12dp"
android:layout_marginTop="29dp"
android:id="@+id/north"
android:onClick="onClick" />
<RadioButton
android:text="@string/south"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/south" />
<RadioButton
android:text="@string/east"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/east" />
<RadioButton
android:text="@string/west"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/west" />
<RadioButton
android:text="@string/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/center" />
</RadioGroup>
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="22dp"
android:id="@+id/speed"
android:layout_below="@+id/Speed"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
的活动:
public class MainActivity extends AppCompatActivity {
RadioButton n, s, e, w, c;
// TextView text = (TextView)findViewById(R.id.text);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public View.OnClickListener optionOnClickListener;
{
optionOnClickListener = new OnClickListener() {
public View v;
public void onClick(View v) {
this.v = v;
TextView text = (TextView) findViewById(R.id.text);
String str = null;
n = (RadioButton) findViewById(R.id.north);
s = (RadioButton) findViewById(R.id.south);
e = (RadioButton) findViewById(R.id.east);
w = (RadioButton) findViewById(R.id.west);
c = (RadioButton) findViewById(R.id.center);
// you can simply copy the string of clicked button.
str = ((RadioButton) v).getText().toString();
text.setText(str);
// or, you can check each radiobutton and find which one is checked.
if (n.isChecked()) {
text.setText("North");
} else if (s.isChecked()) {
text.setText("South");
} else if (e.isChecked()) {
text.setText("East");
} else if (w.isChecked()) {
text.setText("West");
} else if (c.isChecked()) {
text.setText("Center");
}
}
};
}
}
答案 0 :(得分:0)
因为您正在使用XML设置onClick方法:
public View.OnClickListener optionOnClickListener;
{
optionOnClickListener = new OnClickListener() {
public View v;
//delete above here
public void onClick(View v) {
this.v = v; //delete this
TextView text = (TextView) findViewById(R.id.text);
String str = null;
n = (RadioButton) findViewById(R.id.north);
s = (RadioButton) findViewById(R.id.south);
e = (RadioButton) findViewById(R.id.east);
w = (RadioButton) findViewById(R.id.west);
c = (RadioButton) findViewById(R.id.center);
// you can simply copy the string of clicked button.
str = ((RadioButton) v).getText().toString();
text.setText(str);
// or, you can check each radiobutton and find which one is checked.
if (n.isChecked()) {
text.setText("North");
} else if (s.isChecked()) {
text.setText("South");
} else if (e.isChecked()) {
text.setText("East");
} else if (w.isChecked()) {
text.setText("West");
} else if (c.isChecked()) {
text.setText("Center");
}
}
//delete below here
};
}
应该是:
//remove unneccesary variable and wrapper
public void onClick(View v) {
... // keep all the lines in this method except this.v = v;
}
之后它应该编译,虽然我要做的是在onCreate中执行所有findViewById(...),而不是每次点击都执行它们
答案 1 :(得分:0)
好的,事实证明我甚至不需要听众,因为图书馆似乎在照顾它。此外,我认为尼克卡多索说他们说onClick是保留的。这是漫长的一天。谢谢大家的帮助!晚安。