findViewWithTag 在 TableLayout 中返回 null



在我的活动中,有一个像记分牌一样的表格,所以我使用findViewWithTag来查找我想更快地编辑的视图并使我的代码更清晰,但它返回 null。

错误是:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at *.onCreate(score.java:52)

爪哇文件 :


public class score extends Activity {
public void onCreate(Bundle savedInstanceState) {
int i;
super.onCreate(savedInstanceState);
setContentView(R.layout.score);
Button team1 = findViewById(R.id.team1);
team1.setOnClickListener(new ToggleButtonClickListener());
team1.setText(new StringBuilder(String.valueOf(SharedManager.names[0])).append("n").append(SharedManager.names[1]).toString());
Button team2 = findViewById(R.id.team2);
team2.setOnClickListener(new ToggleButtonClickListener());
team2.setText(new StringBuilder(String.valueOf(SharedManager.names[2])).append("n").append(SharedManager.names[3]).toString());
for (i = 17; i <= 23; i++) {
Button button = team1.getRootView().findViewWithTag(i);
button.setOnClickListener(new ToggleButtonClickListener()); //error here
button.setText(SharedManager.en2ar(i - 10));
}
}
}

XML 文件:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background">
<LinearLayout
android:id="@+id/add_score_palceholder"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:paddingRight="10dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/add_score_palceholder"
android:background="@color/background"
android:orientation="vertical"
android:paddingTop="10dp">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbarAlwaysDrawVerticalTrack="false">
<TableLayout
android:id="@+id/add_score_table"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:stretchColumns="*">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right|center_vertical|center_horizontal|center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/bidding_team"
android:textColor="@android:color/black"
android:textSize="20sp"
android:textStyle="bold" />
<TableRow
android:paddingLeft="10dp"
android:paddingRight="10dp">
<Button
android:id="@+id/team2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/button_left_style"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:tag="11"
android:textSize="20sp" />
<Button
android:id="@+id/team1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/button_right_style"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:tag="10"
android:textSize="20sp" />
</TableRow>
<View android:layout_height="10dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right|center_vertical|center_horizontal|center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/bid"
android:textColor="@android:color/black"
android:textSize="20sp" />
<TableRow
android:paddingLeft="10dp"
android:paddingRight="10dp">
<Button
android:id="@+id/bid_9"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_top_left_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="19"
android:text="9"
android:textSize="25sp" />
<Button
android:id="@+id/bid_8"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="18"
android:text="8"
android:textSize="25sp" />
<Button
android:id="@+id/bid_7"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_top_right_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="17"
android:text="7"
android:textSize="25sp" />
</TableRow>
<TableRow
android:paddingLeft="10dp"
android:paddingRight="10dp">
<Button
android:id="@+id/bid_13"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_bottom_left_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="23"
android:text="13"
android:textSize="25sp" />
<Button
android:id="@+id/bid_12"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="22"
android:text="12"
android:textSize="25sp" />
<Button
android:id="@+id/bid_11"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="21"
android:text="11"
android:textSize="25sp" />
<Button
android:id="@+id/bid_10"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_bottom_right_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="20"
android:text="10"
android:textSize="25sp" />
</TableRow>
<View android:layout_height="10dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right|center_vertical|center_horizontal|center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/win"
android:textColor="@android:color/black"
android:textSize="20sp" />
<TableRow
android:paddingLeft="10dp"
android:paddingRight="10dp">
<Button
android:id="@+id/win_5"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_top_left_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="35"
android:text="5"
android:textSize="25sp" />
<Button
android:id="@+id/win_4"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="34"
android:text="4"
android:textSize="25sp" />
<Button
android:id="@+id/win_3"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="33"
android:text="3"
android:textSize="25sp" />
<Button
android:id="@+id/win_2"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="32"
android:text="2"
android:textSize="25sp" />
<Button
android:id="@+id/win_1"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="31"
android:text="1"
android:textSize="25sp" />
<Button
android:id="@+id/win_0"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_top_right_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="30"
android:text="0"
android:textSize="25sp" />
</TableRow>
<TableRow
android:paddingLeft="10dp"
android:paddingRight="10dp">
<Button
android:id="@+id/win_9"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="39"
android:text="9"
android:textSize="25sp" />
<Button
android:id="@+id/win_8"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="38"
android:text="8"
android:textSize="25sp" />
<Button
android:id="@+id/win_7"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="37"
android:text="7"
android:textSize="25sp" />
<Button
android:id="@+id/win_6"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="36"
android:text="6"
android:textSize="25sp" />
</TableRow>
<TableRow
android:paddingLeft="10dp"
android:paddingRight="10dp">
<Button
android:id="@+id/win_13"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_bottom_left_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="43"
android:text="13"
android:textSize="25sp" />
<Button
android:id="@+id/win_12"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="42"
android:text="12"
android:textSize="25sp" />
<Button
android:id="@+id/win_11"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_middle_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="41"
android:text="11"
android:textSize="25sp" />
<Button
android:id="@+id/win_10"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/button_bottom_right_style"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:tag="40"
android:text="10"
android:textSize="25sp" />
</TableRow>
</TableLayout>
</ScrollView>
</LinearLayout>
</RelativeLayout>

您在布局中声明的标签是字符串,在 java 代码中搜索具有 int 值的标签。

更改此设置:

Button button = team1.getRootView().findViewWithTag(i);

对此:

Button button = team1.getRootView().findViewWithTag(String.valueOf(i));

最新更新