何时在ListFragment中调用getListView()是否安全?

时间:2014-02-13 04:22:08

标签: android android-fragments android-listfragment

我正在尝试在列表视图中设置单行的背景。最终,我希望用户能够为每一行选择自己的图像并设置它的背景。我试过以下......

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;
    }
}

0 个答案:

没有答案