我想将项目添加到我的列表中,但它只显示第一个:
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”!!
答案 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