如何根据`ArrayList`更新`ListView`?

时间:2016-01-30 06:25:55

标签: java android arrays listview

我有一系列不断更新的联系人。我希望我的ListView更新我的联系人。

我应该使用Adapter吗?我无法在线找到有关Adapter的大量信息,那么如何确保我的listview始终包含Array的内容? (我一直在研究这个4个半小时!)

例如,如果我有一个包含内容"apple""orange"的数组,那么我的列表也应该说"apple""orange"

如果我选择删除"apple",那么我的列表应该只是"orange"。基本上,我的列表应该始终与我的数组相同。

我看到了this,但接下来我将如何删除并添加更多项目到我的列表中?

5 个答案:

答案 0 :(得分:1)

创建一个像这样的ListAdapter。

[]

现在进入您的活动

public class MyListAdapter extends BaseAdapter {


  private ArrayList<String> names = new ArrayList();

  @Override
  public int getCount() {
    return names.length;
  }

  @Override
  public Object getItem(int location) {
    return names[location];
  }

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

  private static class ViewHolder {
    public TextView listViewNgoName, listViewDistance, listViewRating, listViewAbout, ngoIcon;
  }

  public MyListAdapter(
      ArrayList names) {
    this.names = names;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
     // Write code for instantiating a row based view.
    return convertView;
  }
}

假设您需要在按钮单击时更新列表视图。即。在按钮上单击数组中的值将更改,并且您想要更新listView。

    ArrayList<String> names = new ArrayList();
    names.add("oranges");
    names.add("apple");
    ListView listView = (ListView) findViewById(R.id.listview);
    MyListAdapter adapter = new MyListAdapter(names);
    listView.setAdapter(adapter);

我没有写完整个代码。对你来说只是一个良好的开端。

答案 1 :(得分:0)

所以,您必须通知ListView适配器数据已更改。

listViewAdapater.notifyDataSetChanged();

希望,这会起作用

答案 2 :(得分:0)

我建议使用 ArrayList ,而不是数组

ArrayList over Array的优点是数组需要固定大小。所以如果你正在初始化一个数组

String names[] = new String[10];

大小为10,当你设置为ListView时,ListView将显示10个列表,即使名称只有8个数组位置

如果你使用ArrayList,你不必担心大小,因为它可以向上和向下扩展

List<String> names = new ArrayList<>();
names.add("Raul");
names.add("Khan");
names.remove(1);

add()将一个项目添加到列表中,而remove()删除一个项目。

关于你的回答,假设你有一个项目的ArrayList

当你有一个要添加到列表中的新项目时,只需使用add()方法将其添加到ArrayList,最后在 ArrayAdapter上调用 notifyDataSetChanged()。 /强>

是的,您必须使用像这样的ArrayAdapter

ArrayList<String> namesList = new ArrayList<>();
ArrayAdapter arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, namesList);

当您对列表进行更改时,即向列表中添加项目时,请在arrayAdapter上调用 notifyDataSetChanged()。

答案 3 :(得分:0)

使用ArrayList代替Array[],您无需初始化ArrayList的大小,因此它比Array[]更灵活。如果您在{/ 1}}或add项内

,它会自动向上或向下扩展

答案 4 :(得分:0)

我的setData(List<whatever> data)通常有一个名为Adapter的方法。我的Adapter可以在Activity中说出来。在我的活动中,我从任何地方获取更新的数组,我使用包含更新数组的新数组调用setData()

在我的适配器中,我有一个字段定义为:private List<Whatever> mItems。我在getCount()的{​​{1}}方法中使用此字段来获取列表项,基本上我使用此列表填充Adapter

我在ListView中执行的操作是将setdata()分配给data,然后调用mItems来刷新notifyDataSetchanged(),这次它会使用新的ListView设置数据值,所以一切都更新到适当的状态。

<强>更新

我无法快速访问ListView的适配器,但下面的适配器应该是ViewPager,但原则是相同的:< / p>

public class AdapterTweets extends PagerAdapter {
    private List<Tweet> mItems;

    // [...]

    @Override
    public int getCount() {
        return mItems == null ? 0 : mItems.size();
    }

    // [...]

    public void setData(List<Tweet> items) {
        mItems = items;
        notifyDataSetChanged();
    }
}