我正在创建一个Android应用程序,允许用户单击加号或减号图像按钮来更改文本视图中显示的数字。
每个文本视图有18个文本视图和加号和减号图像按钮。
当我参加此活动时活动崩溃,这是因为这部分代码。调试代码时,我无法提供任何有用的信息,所以任何帮助都将不胜感激,谢谢!
在我的活动顶部:
int score = 0;
ImageButton addButtons[] = {(ImageButton)findViewById(R.id.hole1Up), (ImageButton)findViewById(R.id.hole2Up), (ImageButton)findViewById(R.id.hole3Up), (ImageButton)findViewById(R.id.hole4Up), (ImageButton)findViewById(R.id.hole5Up), (ImageButton)findViewById(R.id.hole6Up), (ImageButton)findViewById(R.id.hole7Up), (ImageButton)findViewById(R.id.hole8Up), (ImageButton)findViewById(R.id.hole9Up), (ImageButton)findViewById(R.id.hole10Up), (ImageButton)findViewById(R.id.hole11Up), (ImageButton)findViewById(R.id.hole12Up), (ImageButton)findViewById(R.id.hole13Up), (ImageButton)findViewById(R.id.hole14Up), (ImageButton)findViewById(R.id.hole15Up), (ImageButton)findViewById(R.id.hole16Up), (ImageButton)findViewById(R.id.hole17Up), (ImageButton)findViewById(R.id.hole18Up),};
ImageButton minusButtons[] = {(ImageButton)findViewById(R.id.hole1Down), (ImageButton)findViewById(R.id.hole2Down), (ImageButton)findViewById(R.id.hole3Down), (ImageButton)findViewById(R.id.hole4Down), (ImageButton)findViewById(R.id.hole5Down), (ImageButton)findViewById(R.id.hole6Down), (ImageButton)findViewById(R.id.hole7Down), (ImageButton)findViewById(R.id.hole8Down), (ImageButton)findViewById(R.id.hole9Down), (ImageButton)findViewById(R.id.hole10Down), (ImageButton)findViewById(R.id.hole11Down), (ImageButton)findViewById(R.id.hole12Down), (ImageButton)findViewById(R.id.hole13Down), (ImageButton)findViewById(R.id.hole14Down), (ImageButton)findViewById(R.id.hole15Down), (ImageButton)findViewById(R.id.hole16Down), (ImageButton)findViewById(R.id.hole17Down), (ImageButton)findViewById(R.id.hole18Down),};
int[] scoreIDs = new int[] {R.id.score1, R.id.score2, R.id.score3, R.id.score4, R.id.score5, R.id.score6, R.id.score7, R.id.score8, R.id.score9, R.id.score10, R.id.score11, R.id.score12, R.id.score13, R.id.score14, R.id.score15, R.id.score16, R.id.score17, R.id.score18,};
public void setPlusButtons()
{
for(int i = 0; i < addButtons.length; i++)
{
final int j = i;
ImageButton button = addButtons[i];
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView tv5 = (TextView) findViewById(scoreIDs[j]);
tv5.setText(score++);
}
});
}
}
public void setMinusButtons()
{
for(int i = 0; i < minusButtons.length; i++)
{
final int j = i;
ImageButton button = minusButtons[i];
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView tv5 = (TextView) findViewById(scoreIDs[j]);
tv5.setText(score--);
}
});
}
}
我的onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_course);
Bundle extras = getIntent().getExtras();
if (extras != null) {
chosenCourseValue = extras.getString("passedChosenCourse");
}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
AsyncAPI APIThread = new AsyncAPI();
APIThread.execute();
setPlusButtons();
setMinusButtons();
}
我的活动XML部分
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Holes"
android:id="@+id/hole1"
android:layout_marginLeft="32dp"
android:textColor="#fff"
android:gravity="center"
android:background="@drawable/circle"
android:height="45dp"
android:width="45dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pars"
android:id="@+id/hole1Par"
android:paddingLeft="22dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Score"
android:id="@+id/score1"
android:paddingLeft="42dp" />
<ImageButton
android:layout_width="30dp"
android:layout_height="30dp"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:cropToPadding="false"
android:id="@+id/hole1Up"
android:gravity="center"
android:layout_marginLeft="32dp"
android:layout_marginTop="6dp"
android:src="@drawable/plus"
android:background="@null" />
<ImageButton
android:layout_width="32dp"
android:layout_height="32dp"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:cropToPadding="false"
android:id="@+id/hole1Down"
android:gravity="center"
android:layout_marginLeft="26dp"
android:layout_marginTop="6dp"
android:src="@drawable/minus"
android:background="@null" />
</LinearLayout>
答案 0 :(得分:0)
findViewById()
只会在设置布局后返回视图。您的代码现在将null
值分配给ImageButton
数组,因此当您遍历它们并尝试设置单击侦听器时,会出现NPE崩溃。
这意味着您必须满足于ImageButton[]
作为声明,然后在onCreate()
被调用后在setContentView()
中初始化其值。
ImageButton addButtons[];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_course);
addButtons = new ImageButton[]{(ImageButton)findViewById(R.id.hole1Up), (ImageButton)findViewById(R.id.hole2Up)};
setPlusButtons();
}
答案 1 :(得分:0)
好的..好的现在,逐步逐步进行。
第1步:定义视图,因为我们在视图中包含df2.drop('Year',1).reset_index()
Year Value
0 91 1
1 92 0
2 93 4
3 94 7
4 95 10
5 96 0
6 97 0
7 98 13
和android:onClick
属性。
android:tag
因此,所有向上图像按钮都应声明为 <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Score"
android:id="@+id/score1"
android:paddingLeft="42dp" />
<ImageButton
android:layout_width="30dp"
android:layout_height="30dp"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:cropToPadding="false"
android:id="@+id/hole1Up"
android:gravity="center"
android:layout_marginLeft="32dp"
android:layout_marginTop="6dp"
android:src="@drawable/plus"
android:background="@null"
android:onClick="upButtonOnClick" // We defines up button's onclick in xml
android:tag="score1"/> // associated TextView id is in Tag of image button
<ImageButton
android:layout_width="32dp"
android:layout_height="32dp"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:cropToPadding="false"
android:id="@+id/hole1Down"
android:gravity="center"
android:layout_marginLeft="26dp"
android:layout_marginTop="6dp"
android:src="@drawable/minus"
android:background="@null"
android:onClick="downButtonOnClick" // We defines down button's onclick in xml
android:tag="score1"/> // associated TextView id is in Tag of image button
,所有向下图像按钮都应声明为android:onClick="upButtonOnClick"
,其关联TextView ID为android:onClick="downButtonOnClick"
属性。
第2步:
而不是android:tag
和setPlusButtons()
定义setMinusButtons()
和upButtonOnClick()
之类的,
downButtonOnClick()
和
public void upButtonOnClick(View imageButton)
{
int textViewId = getResources().getIdentifier(imageButton.getTag(), "id", getPackageName());
TextView score = (TextView) findViewById(textViewId);
score.setText(score++);
}
那就是它。你不需要声明ImageButtons,TextView的Id的数组,并且不需要设置点击监听所有图像按钮。
注意:确保ImageButton标记应与关联的TextView ID相同。
答案 2 :(得分:0)
这只是一个例子,你如何设置一组按钮的ID:
Button [] buttens=new Button[5];
final int ID= R.id.bChoice1;
for (int i = 0; i < 5; i++) {
button[i]=(Button)findViewById(ID+i);
}
但请注意,只要您连续设置按钮ID,它就会起作用!