ListView仅显示ListView第一个位置的最后一项

时间:2019-05-29 09:16:18

标签: java android listview listadapter

我想在列表视图中显示一些项目。问题在于列表视图仅在列表视图的第一位置显示最后一项。它显示了编号。项正确,但其余位置保持空白。

不明白我在哪里做错了。有什么帮助吗?我在此处附有屏幕截图Screenshot

MainActivit.java

ListView topicList;
ArrayList<Topics> topics;
ArrayList<Topics> topicsArrayList;
TopicAdapter topicAdapter;

//Inside onCreat method  
topicList = findViewById(R.id.lv_list);

        //Array list to show items in the list view
        topics = new ArrayList<>();
        topicAdapter = new TopicAdapter(this, R.layout.list_item_row, topics);
        topicList.setAdapter(topicAdapter);

        //Array list to add the list items
        topicsArrayList = new ArrayList<>();

        Topics vumika = new Topics();
        vumika.setTopicName("Vumika");
        topicsArrayList.add(vumika);

        Topics prachin_yug = new Topics();
        vumika.setTopicName("Prachin Yug");
        topicsArrayList.add(prachin_yug);

        Topics madhya_yug = new Topics();
        vumika.setTopicName("Madhya Yug");
        topicsArrayList.add(madhya_yug);

        Topics adhunik_yug = new Topics();
        vumika.setTopicName("Adhunik Yug");
        topicsArrayList.add(adhunik_yug);

        //Add all the topics to the topic list
        if (topicsArrayList != null || topicsArrayList.size() > 0) {
            topics.addAll(topicsArrayList);
            topicAdapter.notifyDataSetChanged();
        }

TopicAdapter.java

public class TopicAdapter extends BaseAdapter {

    private Context context;
    private int layout;
    private ArrayList<Topics> topics;
    private ViewHolder viewHolder;

    public TopicAdapter(Context context, int layout, ArrayList<Topics> topics) {
        this.context = context;
        this.layout = layout;
        this.topics = topics;
    }

    public TopicAdapter(Context context, int layout, ArrayList<Topics> topics, ViewHolder viewHolder) {
        this.context = context;
        this.layout = layout;
        this.topics = topics;
        this.viewHolder = viewHolder;
    }

    @Override
    public int getCount() {
        return topics.size();
    }

    @Override
    public Object getItem(int position) {
        return topics.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row = convertView;
        viewHolder = new ViewHolder();

        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (inflater != null) {
                row = inflater.inflate(layout, null);
                viewHolder.topicName = row.findViewById(R.id.tv_topic_name);
                row.setTag(viewHolder);

            }
        } else {
            viewHolder = (ViewHolder) row.getTag();
        }

        Topics topic = topics.get(position);
        viewHolder.topicName.setText(topic.getTopicName());

        return row;
    }

    private class ViewHolder {
        TextView topicName;
    }
}

3 个答案:

答案 0 :(得分:3)

它显示最后一项,因为您反复使用vumika.setTopicName() setter方法。您必须为每个新的Topics对象设置名称。

正确的是

Topics vumika = new Topics();
vumika.setTopicName("Vumika");
topicsArrayList.add(vumika);

Topics prachin_yug = new Topics();
prachin_yug.setTopicName("Prachin Yug");
topicsArrayList.add(prachin_yug);

Topics madhya_yug = new Topics();
madhya_yug.setTopicName("Madhya Yug");
topicsArrayList.add(madhya_yug);

Topics adhunik_yug = new Topics();
adhunik_yug.setTopicName("Adhunik Yug");
topicsArrayList.add(adhunik_yug);

答案 1 :(得分:3)

第一个主题Topics vumika = new Topics();每次通过更改其名称而被添加到topicsArrayList,。这样就反映了姓氏。因此,使用以下命令:-

vumika.setTopicName("Adhunik Yug");是写在vumika中的姓氏

  Topics vumika = new Topics();
  vumika.setTopicName("Vumika");
  topicsArrayList.add(vumika);

  Topics prachin_yug = new Topics();
  prachin_yug.setTopicName("Prachin Yug");
  topicsArrayList.add(prachin_yug);

  Topics madhya_yug = new Topics();
  madhya_yug.setTopicName("Madhya Yug");
  topicsArrayList.add(madhya_yug);

  Topics adhunik_yug = new Topics();
  adhunik_yug.setTopicName("Adhunik Yug");
  topicsArrayList.add(adhunik_yug);

答案 2 :(得分:3)

存在复制粘贴错误,仅vumika处于更改状态,更改如下

 topics = new ArrayList<>();
        topicAdapter = new TopicAdapter(this, R.layout.list_item_row, topics);
        topicList.setAdapter(topicAdapter);

        //Array list to add the list items
        topicsArrayList = new ArrayList<>();

        Topics vumika = new Topics();
        vumika.setTopicName("Vumika");
        topicsArrayList.add(vumika);

        Topics prachin_yug = new Topics();
        prachin_yug.setTopicName("Prachin Yug");
        topicsArrayList.add(prachin_yug);

        Topics madhya_yug = new Topics();
        madhya_yug.setTopicName("Madhya Yug");
        topicsArrayList.add(madhya_yug);

        Topics adhunik_yug = new Topics();
        adhunik_yug.setTopicName("Adhunik Yug");
        topicsArrayList.add(adhunik_yug);