【问题标题】:Dynamically add items in list view在列表视图中动态添加项目
【发布时间】:2011-08-04 08:40:15
【问题描述】:

我想制作一个动态列表视图,在我第一次登录时获取用户凭据,并在我下次启动应用程序时将其显示在列表中。我知道如何将用户名从一个意图发送到另一个意图。我还没有专注于 SQLite 部分,稍后会做。我在创建动态列表视图时遇到问题。 找到一个非常有用的线程 - Dynamically add elements to a listView Android

他使用屏幕上的一个按钮并调用方法 onClick 来填充列表。我可以不用按钮吗?我希望它在我能够登录后自动发生。 如何在我的代码中使用这些语句?

listItems.add(value);
adapter.notifyDataSetChanged();

这里的值是我从其他意图获得的用户名。
请帮忙。谢谢!

【问题讨论】:

标签: android listview dynamic


【解决方案1】:

为此,只需使用下面给出的示例: 例如,您正在将一些字符串添加到您的列表中

所以像这样创建一个 ListArray

ArrayList<String> listItems = new ArrayList<String>();

现在,当你想将某个字符串添加到列表中时,只需执行此操作

  EditText editText = (EditText) findViewById(R.id.edit);
  listItems.add("my string");  OR
  listItems.add(editText.getText.toString()); //incase if you are getting string value from editText and adding it into the list

在 main.xml 的线性布局中使用这个 Xml

  <EditText android:id="@+id/edit"
     android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

现在,当您动态添加一项时,然后调用它

  adapter.notifyDataSetChanged();

以上将更新您的列表并显示更新的列表。

有关此的更多信息,请参阅以下链接:

http://www.androidpeople.com/android-custom-listview-tutorial-part-1
http://www.androidpeople.com/android-custom-listview-tutorial-part-2
http://www.androidpeople.com/android-custom-dynamic-listview-%E2%80%93part3

在这些教程中,您可以将 String[] 替换为答案顶部给出的 ArrayList,当您想要添加任何项目时,只需使用第二个代码 sn-p。

谢谢

【讨论】:

  • 它说 getText 无法解析或不是字段。为什么会这样?
  • 好吧 editText 是你的 android EditText 对象,我们可以说它是一个从用户那里获取输入的 TextBar。如果您想从 android 的 edittext 字段中获取输入文本并将其添加到列表中,我只是给出了这个示例。查看我编辑的答案
  • 我已将要显示的字符串存储在变量“值”中。如果我这样做 listItems.add(value) 那么它会给出一个错误。
  • 请您按照第一个链接的答案中提到的教程进行操作。这就是您的答案...只需将 String[] 替换为 ArrayList
  • 但是当我做了 listItems.add("hello");然后它在屏幕上显示你好。我将按照教程进行操作。我只想知道 listItems.add() 中是否可以包含字符串变量的名称?
【解决方案2】:

最好的方法是使用ArrayAdapter。修改适配器时,它会自动刷新,因此您不必调用notifyDataSetChanged

【讨论】:

  • 代码正在使用 ArrayAdapter。 adapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, listItems); setListAdapter(适配器);
  • 那么您的问题是什么,只需将项目添加到适配器并记住您必须在 UI 线程中添加元素,例如所有修改适配器的方法都应该在 UI 线程中。
【解决方案3】:

您可以尝试使用此代码将元素动态添加到列表视图。 您也可以通过单击按钮来完成。

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
    //step2 : create all the variables.
    EditText et;
    Button b;
    ListView lv;
    ArrayList<string> al;
    ArrayAdapter<string> aa;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //step3 : intitalize all the variables.
        et = (EditText) findViewById(R.id.editText1);
        b = (Button) findViewById(R.id.button1);
        lv = (ListView) findViewById(R.id.listView1);
        al = new ArrayList<string>();//initialize array list
        aa = new ArrayAdapter<string>(this, 
                android.R.layout.simple_list_item_1, 
                al);//step4 : establish communication bw arraylist and adapter
        //step5 : establish communication bw adapter and dest (listview)
        lv.setAdapter(aa);
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, 
                    View v, int arg2,
                    long arg3) {
                String item = al.get(arg2);
                Toast.makeText(getApplicationContext(), item, 0).show();
            }
        });
        //step6 : button click logic
        b.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //step i: take text from et and add to arraylist
                String item = et.getText().toString();
                al.add(0, item);
                //step ii: notify to adapter
                aa.notifyDataSetChanged();
                //step iii: clr edit text
                et.setText("");
            }
        });
    }
}

完整代码检查this list view example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多