Android FindViewById 仅适用于子布局(列表视图行)而不适用于父布局中的 TextView

Android FindViewById is only working for a child layout (listview row) and not for TextViews in the parent layout

我猜我的问题是膨胀布局。我有 2 个布局文件:

activity_mail.xlm:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/results"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <TextView
            android:id="@+id/profilesCount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0"
            android:textSize="18sp" />
            
    
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</LinearLayout>

... 和 listitem_device.xlm:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

        <TextView
            android:id="@+id/device_label"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"/>

        <TextView
            android:id="@+id/device_service"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1.5"/>

</LinearLayout>            

在我的 main_activity java 文件中,我有:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    ....
    

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder;

        if (view == null) {
            view = mInflator.inflate(R.layout.listitem_device, null);
            viewHolder = new ViewHolder();
            viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_label); // from listitem_device.xml
            
            viewHolder.profilesCount = (TextView) view.findViewById(R.id.profilesCount); // from activity_main.xml

问题出在后续代码:

viewHolder.profilesCount.setText("HELLO");

生成错误“尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'”。

我该如何解决这个问题?

我在任何地方都看不到您甚至拥有 ID 为“profilesCount”的视图。您在用于扩充列表行的布局文件中只有设备标签和设备服务作为 ID view.Better 也使用 Recycler 视图,它提供了更多的灵活性。

此外,您无法在适配器的 getView() 函数中访问 activity_mail.xml 中的内容,因为通过在 getfunction 中使用“view”,因为它仅对应于列表视图的行,并且由于该 id 不存在于与列表视图行关联的 xml 文件中,您将“viewholders.profileCount”作为 null,因此出现 Nullpointer 异常。

如果您想在适配器中使用 TextView 或任何视图,最好创建一个接口并在 activity 中实现该接口以用作回调,然后设置 [=19] 的 textview 字段=] 文件,这是最好的方法,因为它会保留你的代码 cleaner.Other 方法是将 activity 的引用传递给你的适配器,然后从 [=] 中找到文本视图或你想使用的任何内容21=] 文件,但不推荐这样做,因为它可能需要额外的内存,这是一种非常糟糕的方式。