TableLayout 中的 findViewWithTag returns null

findViewWithTag returns null in TableLayout

在我的 activity 中有一个 table 就像记分牌,所以我使用 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)

java file :


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 file:


<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));