【问题标题】:Why is inflation of layout causing text view in listview to disappear?为什么布局膨胀导致列表视图中的文本视图消失?
【发布时间】:2013-11-13 05:28:54
【问题描述】:

所以我使用了一个自定义的 ArrayAdapter 实现,以便我可以访问我的列表视图元素中的切换按钮。

每个列表视图都有一个文本视图和一个切换按钮。我必须使用附加到列表视图的自定义 ArrayAdapter,以便我可以将正确的切换按钮附加到被单击的列表视图的位置。然而,每次我膨胀布局以获得视图时,列表视图中的文本视图都会消失。值仍然存在,但 textview 不存在。但是切换按钮显示正常。这是用于膨胀布局和获取视图的代码:

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            v = inflater.inflate(R.layout.activity_alarm_item, parent, false);
        }
        ToggleButton toggle = (ToggleButton) v.findViewById(R.id.alarm_status);
        toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Log.d("ENABLE ALARM", Integer.toString(position));
                    enableAlarm(position);
                } else {
                    disableAlarm(position);
                }

            }
        });
        return v;
    }

使布局膨胀的两条线看起来有问题吗?

布局很好。我恢复到原来的适配器,textview 文本又回来了。

但是,这里是活动布局:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp" >

    <TextView
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:textIsSelectable="false"
        android:textSize="20sp"
        android:paddingLeft="5dp" />


    <ToggleButton
        android:id="@+id/alarm_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:clickable="true"
        android:onClick="enableAlarm"
        android:background="?android:attr/selectableItemBackground"
        android:focusable="false" />

    <TextView
        android:layout_width="1px"
        android:layout_height="fill_parent"
        android:layout_toLeftOf="@id/alarm_status"
        android:layout_centerVertical="true"
        android:background="?android:attr/dividerVertical" />

    </RelativeLayout>

【问题讨论】:

  • 请发布您的 activity_alarm_item xml 代码。
  • 布局很好。我恢复到原来的适配器,textview 文本又回来了。
  • 布局膨胀时似乎有问题。是不是其中一个参数不对,比如不使用root?

标签: android android-layout android-listview layout-inflater


【解决方案1】:

您在哪里将文本设置为 TextViewTextView 似乎是空的。这就是我猜它不显示的原因。

在 Xml 文件本身中将文本设置为 TextView

android:text ="text"

否则在getView函数内

TextView textView = (TextView) v.findViewById(R.id.time);
textView.setText("Text");

【讨论】:

  • 但是文本来自数据库,并且是为来自附加到适配器的数组的每个列表视图项设置的。
  • 至少试着把它放在@AbhishekV 显示的样子,以检查问题是否在这里。
  • 实际上这是一种解决方法。不过,我不得不对其进行一些调整。我不知道它会设置每个项目。
  • @user10297 文本不会自动设置为TextView,因为您使用的是自定义适配器。在getView 方法中,使用position 作为索引从数组中获取文本并将其设置为@987654330 @.
【解决方案2】:

在评论中写得太长,我尝试将其作为答案。我不确定您是否正确获取上下文。我个人在自定义适配器中声明布局充气器如下:

private LayoutInflater mInflater = (LayoutInflater)   
                getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

然后我在getView() 中使用充气器,如下所示

v = mInflater.inflate(R.layout.activity_alarm_item, parent, false);

如果它解决了你的问题,请告诉我,否则我会删除我的答案。

【讨论】:

  • 值得一试。所以我不知道问题是什么。
猜你喜欢
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
相关资源
最近更新 更多