每次单击按钮时,我都需要更新我的ListView
内容(从数据库中检索)。我想在我的Android应用程序中包含一个书籍搜索功能。
为此,我将一些关键字作为输入。在按钮上单击从数据库中检索与关键字匹配的书籍详细信息,并以相同的布局显示在列表视图中。
我编写的代码会在每次点击按钮时创建一个新的ListView
内容,并将其显示在上一个ListView
下方。我需要更正。
首选解决方案是在按钮点击时更新列表视图内容。
删除先前显示的ListView
也是可以接受的。
为此,我尝试getListView().inValidate()
但没有奏效。 notifyDataSetChanged()
也无效。请帮助:)
public class searchActivity extends ListActivity {
String keyword;
Button bsearch;
EditText input;
JSONParser jParser = new JSONParser();
JSONArray books = null;
SimpleAdapter adapter;
ArrayList<HashMap<String, String>> booksList;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState{
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
bsearch=(Button)findViewById(R.id.search);
input=(EditText)findViewById(R.id.inputSearch);
booksList = new ArrayList<HashMap<String, String>>();
adapter=newSimpleAdapter(searchActivity.this,booksList,R.layout.search_list,new String[]{"bookname"},new int[] {R.id.bookname});
getListView().setAdapter(adapter);
bsearch.setOnClickListener(new View.OnClickListener() {
public void onClick(View view){
keyword=input.getText().toString();
new LoadAll().execute();
}
});
}
class LoadAll extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("keyword", keyword));
JSONObject json = Jparser.makeHttpRequest("http://10.0.2.2 /libraryconnect/search_book.php", "GET", params);
Log.d("All books: ", json.toString());
try {
int success = json.getInt("success");
if (success == 1) {
books = json.getJSONArray("books");
for (int i = 0; i < books.length(); i++) {
JSONObject c = books.getJSONObject(i);
String name = c.getString("bookname");
HashMap<String, String> map = new HashMap<String, String>();
map.put("bookname",bookname);
booksList.add(map);
}
} else {
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
runOnUiThread(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
}
}
}
答案 0 :(得分:1)
在onClick(View v)
中,从adapter
答案 1 :(得分:0)
您可以更改列表视图的数据集,然后在其上调用notifyDataSetChanged()
,而不是为其创建新的列表视图或新适配器。
您可以在Android ListView - Tutorial找到您需要了解的内容。