gpt4 book ai didi

Android:从第二个 Activity 返回时在第一个 Activity 中刷新 ListView

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:36 25 4
gpt4 key购买 nike

当用户关闭一个 Activity 并返回到上一个 Activity 时,列表刷新出现问题。我发现这个问题很常见,但我无法解决。

我覆盖了 onResume 方法:

@Override
public void onResume() {
super.onResume();
populateList();
}

populateList() 是一种用字符串列表填充 listView 的方法:

arrayAdapter = new CustomArrayAdapter(this, R.layout.symbol_item,list);
listView.setAdapter(arrayAdapter);

问题是,当第二个 Activity 关闭时,新项目只是再次添加到 ListView 中,所以我将每个项目都加倍了。就像它没有刷新一样。

如果我将 notifyDataSetChanged() 放在 onResume() 中,它会抛出 nullPointerException,因为当 Activity 第一次启动时,第一次启动 Activity 时没有初始化适配器。

我不确定如何处理。

public class testActivity extends Activity {


private int id=1;
private ListView listView;
private CustomArrayAdapter arrayAdapter;
private ArrayList<String> list = new ArrayList<String>();
ArrayList<Item> objectList = new ArrayList<Item>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);

}

@Override
public void onResume() {
super.onResume();
populateList();
}

private void populateList() {
try {
objectList = new GetAsyncTask(id).execute();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

int size = objectList.size();
String name;

for (int i = 0; i < size; i++) {
name = objectList.get(i).getName();
list.add(name);
}

arrayAdapter = new CustomArrayAdapter(this, R.layout.symbol_item,
list);
listView.setAdapter(arrayAdapter);
}
}

最佳答案

马上,您可以使用一个简单的条件语句轻松解决这个问题,该条件语句仅在适配器不是 null 时才执行命令:

    if (adapter != null) {
adapter.notifyDataSetChanged();
}

但在我看来,在更深层次上,您的代码可以在某种程度上重构以提高效率,但不一定更实用。


这样做:

private int id = 1;
private ListView listView;
private CustomArrayAdapter arrayAdapter;
private ArrayList<String> list = new ArrayList<String>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
}

@Override
public void onResume() {
super.onResume();
populateList();
}

private void populateList() {

ArrayList<Item> objectList;
try {
objectList = new GetAsyncTask(id).execute();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}

list.clear();
for (int i = 0; i <objectList.size(); i++) {
String name = objectList.get(i).getName();
list.add(name);
}
if (arrayAdapter == null) {
arrayAdapter = new CustomArrayAdapter(this, R.layout.symbol_item, list);
listView.setAdapter(arrayAdapter);
} else {
arrayAdapter.notifyDataSetChanged();
}
}

关于Android:从第二个 Activity 返回时在第一个 Activity 中刷新 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com