适配器和循环视图,其中包含动态数量的元素

时间:2014-07-21 09:59:38

标签: android

所以我有一个ListView,其中每个列表项看起来都像 Holder my ViewHolder

很容易插入这些复选框。我这样做了

public class QuestionableActivity extends Activity {
    private QuestionableListAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.questionable_activity);

        if(mAdapter == null){
            mAdapter = new QuestionableListAdapter();
        }

        ListView questionListView = (ListView) findViewById(R.id.questionable_listview);
        questionListView.setAdapter(mAdapter);
    }

    public static class QuestionableListItemFragment extends Fragment {
        public QuestionableListItemFragment() {}
    }

    private class QuestionableListAdapter extends BaseAdapter {
        private ArrayList<QuestionableListItemFragment> mList;
        private QuestionableListAdapter() {
            mList = new ArrayList<QuestionableListItemFragment>();
            for (int i = 0; i <  10; i+=1){
                mList.add(new QuestionableListItemFragment());
            }
        }

        @Override
        public int getCount() {
            return 10;
        }

        @Override
        public Object getItem(int i) {
            return mList.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int position, View view, ViewGroup viewGroup) {
            if(view == null){
                view = getLayoutInflater().inflate(R.layout.question_fragment, null);
            }
            for (int i = 0; i < 4; i++) {
                LinearLayout qOption = (LinearLayout) getLayoutInflater().inflate(R.layout.question_option_fragment, viewGroup, false);
                ((LinearLayout) view).addView(qOption);
            }
            return view;
        }
    }
}

我理解在listview中重新定义视图的概念。因此,在我的adapter

  1. if(view == null) - 首次创建新视图,因此我的list item fragment xml
  2. 充气
  3. else - 正在重复使用,只需更新片段中的视图元素
  4. 即可

    这么多,我明白了。但现在,这是否意味着当我必须创建/更新新片段时,我必须删除所有动态创建的元素,然后再次重新创建它们,因为它们可能/可能与特定片段无关?如果我不这样做,对于每个进入视图的片段,都会发生这种情况

    Woe becomes me!

    复选框将添加每次时间。这很有道理,但那么做这些事情的最佳方法是什么呢?

1 个答案:

答案 0 :(得分:0)

你在每个循环中添加了四次视图,为什么不在你的R.layout.question_option_fragment xml中写下4个视图