我有一个导航抽屉,它使用主活动布局中定义的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没有任何效果,无论更改哪个属性,菜单项都显示相同!
为什么会这样?我在这里做错了什么?
答案 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
中的属性生效。