我在Android Studio中使用Activity with Navigation Drawer项目模板,它会生成如下导航菜单:
mDrawerListView.setAdapter(new ArrayAdapter<String>(
getActionBar().getThemedContext(),
android.R.layout.simple_list_item_1,
android.R.id.text1,
new String[]{
getString(R.string.title_section1),
getString(R.string.title_section2),
getString(R.string.title_section3),
}));
我正在寻找一种简单的方法来迭代这些项目并使用新信息更新其中一些项目的子文本。所以我尝试在android.R.layout.simple_list_item_1
调用中将android.R.layout.simple_list_item_2
更改为setAdapter()
,并像这样循环遍历:
View v;
TextView tv;
for(int i = 0; i < mDrawerListView.getCount(); i++){
v = mDrawerListView.getAdapter().getView(i,null,null);
tv = (TextView) v.findViewById(android.R.id.text2);
tv.setText("Sub Item");
}
哪个不起作用,但它不会抛出任何错误。我还尝试使用getChildAt()
而不是通过getAdapter()
,这导致了空引用错误。
解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
我有同样的问题,但解决方案非常简单。您只需要覆盖适配器的getView方法:
public View getView(int position, View convertView, ViewGroup parent)
您可以保留此方法的正常行为并添加您想要执行的操作,例如,在您的情况下,您需要添加以下内容:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view= super.getView(position, convertView, parent);
TextView tv= (TextView) view.findViewById(android.R.id.text2);
tv.setText("sub text");
}
这应该有用。