Android ListView不显示列表项

时间:2016-10-08 12:20:56

标签: android list adapter

我想将项目添加到我的列表中,但它只显示第一个:

public class MainActivity extends Activity {

    Server server;
    TextView infoip, msg;
    TextView usersTitle;
    String[] array = {"a"};
    ArrayList<String> lst;
    ArrayAdapter<String> adapter;
    ListView userList;

    @Override
    public void onCreate(Bundle savedInstanceState) {        
        lst = new ArrayList<String>(Arrays.asList(array));
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lst);
        userList = (ListView) findViewById(R.id.userList);
        userList.setAdapter(adapter);

从这个其他的类方法来看,每次调用它时我希望文本低于第一个。该方法肯定会运行,但它不会将文本放在前一个下面。它只是显示“一个”!谁知道为什么?

activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {


                        activity.lst.add(message);
                        activity.adapter.notifyDataSetChanged();                           

                    }
                });

我也尝试过:

adapter.insert(String, int);

lst.add(int, String);

甚至在onCreate方法中添加了这个:

lst.add(1, "2");
adapter.notifyDataSetChanged();

仍然没有添加“2”!!

5 个答案:

答案 0 :(得分:1)

如果要从另一个类向Arraylist添加项目,则必须声明Arraylist Static.So它可以将项目保存在内存中。

将ArrayList lst替换为public static ArrayList

答案 1 :(得分:1)

这是你问题的解决方案。我创建了一个Activity类并测试了java类。

public class MainActivity extends Activity {
String[] array = {"a"};
public static ArrayList<String> lst;
ArrayAdapter<String> adapter;
ListView userList;
Tests tests = new Tests();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    userList = (ListView) findViewById(R.id.userList);
    lst = new ArrayList<String>(Arrays.asList(array));
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lst);

    userList.setAdapter(adapter);
    tests.callThread();
}

}

这是Tests.java类    公共课程考试{

int i = 0;
String message = "";
Thread runOnUiThread;

public void callThread()

{


    new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                while (i < 10) {
                    i = i + 1;
                    message = String.valueOf(i);
                    //Create a server socket object and bind it to a port
                    MainActivity.lst.add(message);
                }


                }catch(Exception e){
                    e.printStackTrace();
                }
        }
    }).start();
}

}

只需在此线程中调用您的服务,我已经增加了变量i,这样您就可以按正确的顺序填充列表。

答案 2 :(得分:0)

你能说出另一个类是Activity还是Fragment? 在将数据添加到Arraylist中时,您不需要运行Thread以便向Arraylist插入新数据

答案 3 :(得分:0)

尝试制作&#34; lst&#34;和&#34;适配器&#34;都是静态的。

答案 4 :(得分:0)

我对 runOnUiThread 持怀疑态度。您能提供更多信息,为什么使用此功能?我强烈建议使用RecyclerView

您也可以参考此post将项目添加到RecyclerView