为什么ArrayAdapter不使用传递给它的TextView?

时间:2013-11-18 14:22:04

标签: android listview textview android-arrayadapter navigation-drawer

我有一个导航抽屉,它使用主活动布局中定义的ListView:

<!-- Navigation drawer (left) -->
<ListView android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/darker_gray"
    android:dividerHeight="1dp"
    android:background="#e5e5e5"/>

我填充它:

navMenuItems = getResources().getStringArray(R.array.NavMenuItems);
navDrawerList = (ListView) findViewById(R.id.left_drawer);

// Set the adapter for the list view
navDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.nav_list_item, navMenuItems));

由于ArrayAdapter需要传递给它的TextView资源ID,我使用一个单独的布局文件,其中只有一个TextView用于菜单项:

nav_list_item.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/nav_menu_text"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_gravity="right"
    android:gravity="right"
    android:layoutDirection="rtl"
    android:paddingBottom="5dp"
    android:paddingTop="5dp"
    android:paddingRight="8dp"
    android:textColor="@android:color/white"
    android:textSize="50sp"
    android:textIsSelectable="true"
    android:textAlignment="textStart"
    android:textDirection="anyRtl" >
</TextView>

但是,TextView没有任何效果,无论更改哪个属性,菜单项都显示相同!

为什么会这样?我在这里做错了什么?

4 个答案:

答案 0 :(得分:2)

在资源中,您应该提供layout而不是id的文字视图

new ArrayAdapter<String>(this, R.layout.'yourlayoutname', navMenuItems)

答案 1 :(得分:0)

您应该添加一个参数,以确保适配器知道映射navitem内容的视图。

作为第3个参数,添加textview的id的id。像这样:

new ArrayAdapter<String>(this, R.layout.nav_list_item, R.id.nav_menu_text, navMenuItems)

而不是

new ArrayAdapter<String>(this, R.layout.nav_list_item, navMenuItems)

我不确定这一点,但如果你不想使用textview的id,可能会将id字段命名为&#34; text01&#34;这是android.R.layout.simple_list_item_1的文本视图的id。

答案 2 :(得分:0)

试试这个:

new ArrayAdapter<String> (Context context, R.layout.nav_list_item, R.id.nav_menu_text, navMenuItems);

希望这可以帮助你...

答案 3 :(得分:0)

我找到了解决方案:

我为导航列表创建了一个自定义适配器,并在其getView()(@override)中使用了我的textView

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {
        Log.d("Log", "Null v");
        LayoutInflater vi;
        vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.nav_list_item, null);
    }


    String s = values.get(position);

    TextView textView = (TextView) v.findViewById(R.id.nav_menu_text);
    textView.setText(s);

    return v;
}

现在textView中的属性生效。