我正在尝试在列表视图中设置单行的背景。最终,我希望用户能够为每一行选择自己的图像并设置它的背景。我试过以下......
getListView().getChildAt(0).setBackground(getResources().getDrawable(R.drawable.notecard_background));
onStart()
,onViewCreated()
和onResume()
。在所有这些方法中,上面的调用都会返回null
视图。当我在onListItemClick()
中使用相同的代码行时,它可以正常工作。我认为onViewCreated()
是最好的地方。应该创建视图。这里发生了什么?为什么我只能通过ListView
中的onListItemClick()
获取子视图?相反,为什么我不能在onViewCreated()
或任何应该在onStart()
和onResume()
之后调用的方法中获取它?
编辑:
我的适配器正在
中设置 public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
if(savedInstanceState!=null){
setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_activated_1,savedInstanceState.getStringArrayList("cNames")));
}else{
setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_activated_1,parentSubject.getCardNames()));
}
//the line below returns null for getChildAt()
// getListView().getChildAt(0).setBackground(getResources().getDrawable(R.drawable.notecard_background));
}
编辑2:
结束创建我自己的适配器并获取其中列表项视图的句柄。我还是想知道上面发生了什么。
public class CardListAdapter extends ArrayAdapter<Cards>{
private Activity context;
public CardListAdapter(Context context, int textViewResourceId, ArrayList<Cards> cards) {
super(context, textViewResourceId,cards);
this.context=(Activity)context;
// TODO Auto-generated constructor stub
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TextView tv=(TextView)context.findViewById(R.id.list_item_text);
view = inflater.inflate(R.layout.list_item, null);
}
Cards item = getItem(position);
if (item!= null) {
// My layout has only one TextView
TextView itemView = (TextView) view.findViewById(R.id.list_item_text);
if (itemView != null) {
itemView.setText(item.getCardFront());
itemView.setBackground(context.getResources().getDrawable(R.drawable.notecard_background));
}
}
return view;
}
}