这是在更新和保存后作为结果页面打开的ArrayList页面。我想我需要以某种方式刷新,以便它反映UI上的变化。我试过调用notifyDataSetChanged(),但没有运气经验。有人可以告诉你如何实施它吗?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all_requests);
requestsList = new ArrayList<HashMap<String, String>>();
new LoadAllRequests().execute();
ListView list = getListView();
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String request_id = ((TextView) view.findViewById(R.id.request_id)).getText().toString();
Intent in = new Intent(getApplicationContext(),
ViewRequestActivity.class);
in.putExtra(TAG_ID, request_id);
startActivityForResult(in, 100);
}
});
}
// Response from ViewRequestActivity when delete a request reload this page again
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// if result code 100
if (resultCode == 100) {
Intent intent = getIntent();
finish();
startActivity(intent);
}
}
class LoadAllRequests extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(url_all_requests, "GET", params);
Log.d("All Requests: ", json.toString());
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
requests = json.getJSONArray(TAG_REQUESTS);
for (int i = 0; i < requests.length(); i++) {
JSONObject c = requests.getJSONObject(i);
String request_id = c.getString(TAG_ID);
String request_title = c.getString(TAG_TITLE);
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, request_id);
map.put(TAG_TITLE, request_title);
requestsList.add(map);
}
} else {
Intent i = new Intent(getApplicationContext(),
NewRequestActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:2)
您需要为ListView创建适配器。适配器将数据提供给它以供显示。我建议你阅读本教程:
http://www.vogella.com/articles/AndroidListView/article.html
因此,一旦您创建了适配器然后调用lv.setAdapter(<adapter>)
,就可以调用<adapter>.notifyDataSetChanged()
。这将告诉适配器它需要刷新自己。
答案 1 :(得分:1)
您可以对适配器使用notifyDataSetChanged()方法。无论您想要更新列表视图,都可以按以下方式使用。
adapter.notifyDataSetChanged();