【问题标题】:How adding an item in the ArrayList and ArrayAdpter如何在 ArrayList 和 ArrayAdpter 中添加项目
【发布时间】:2016-06-17 12:30:17
【问题描述】:

我正在聊天,我需要增加一个包含已发送消息的列表,但我无法做到。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_janela);
    ArrayList<String> mensagens = new ArrayList<String>();
    ArrayAdapter<String> adapter = 
        new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mensagens);
    ListView lv = (ListView)findViewById(R.id.lista);
    lv.setAdapter(adapter);
}

下面这个方法我得到消息文本,是我想增加列表的地方。

private void escreve(String texto) {
    mensagens.add(texto);
}

希望已经清楚了,谢谢关注

【问题讨论】:

  • 错误是什么?怎么不行?
  • 你错过了adapter.notifyDataSetChanged()

标签: java android listview arraylist


【解决方案1】:

在外部声明 arralist 和适配器,然后在数据更改时通知它,以便它可以工作,请查看以下解决方案。

  ArrayList<String> mensagens;
  ArrayAdapter<String> adapter;

  protected void onCreate(Bundle savedInstanceState) 
  {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_janela);
     mensagens = new ArrayList<String>();
     adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mensagens);
     ListView lv = (ListView)findViewById(R.id.lista);
     lv.setAdapter(adapter);
}


 private void escreve(String texto) {
      mensagens.add(texto);
      adapter.notifyDataSetChanged();
  }

【讨论】:

    【解决方案2】:

    您的错误:您不能在一种方法中将列表创建为局部变量并在另一种方法中使用它。您必须将mensages 设为类变量。

    【讨论】:

    • 好的,所以我应该在 android 的 onCreate 方法之前 acriar ArrayList 消息,并在我希望增加的方法中使用它?甚至在 onCreate 中实例化它?
    【解决方案3】:

    如果我理解正确,您需要一个成员变量。

    您可以直接添加到 ArrayAdapter 而无需 notifyDatasetChanged

    private ArrayAdapter<String> adapter;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_janela);
        ArrayList<String> mensagens = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mensagens);
        ... 
    
    private void escreve(String texto) {
        adapter.add(texto);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 2017-11-30
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      相关资源
      最近更新 更多