我希望每次按下搜索按钮并使用编辑文本中的字符串刷新列表视图,但列表不刷新。
这是我的MainActivity:
public class MainActivity extends ListActivity implements OnClickListener {
private DataSource datasource;
Button search;
EditText searchEt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
search = (Button) findViewById(R.id.bSearch);
searchEt = (EditText) findViewById(R.id.etTextSearch);
search.setOnClickListener(this);
datasource = new DataSource(this);
datasource.open();
List<Recipe> values = datasource.getAllRecipe(Recipe.l);
// List<Recipe> values = datasource.getAllRecipe();
// use the SimpleCursorAdapter to show the
// elements in a ListView
ArrayAdapter<Recipe> adapter = new ArrayAdapter<Recipe>(this,
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ArrayAdapter<Recipe> adapter = (ArrayAdapter<Recipe>) getListAdapter();
Recipe title = null;
switch (v.getId()) {
case R.id.bSearch:
try {
String s = searchEt.getText().toString();
Recipe.l = s;
Log.i("1", Recipe.l + "");
} catch (Exception e) {
String error = e.toString();
Dialog d = new Dialog(this);
d.setTitle("Row Empty or ID not found");
TextView tv = new TextView(this);
tv.setText(error);
d.setContentView(tv);
d.show();
}
break;
}
adapter.notifyDataSetChanged();
}
@Override
protected void onResume() {
datasource.open();
super.onResume();
}
@Override
protected void onPause() {
datasource.close();
super.onPause();
}
}
这是我DAO的方法:
public List<Recipe> getAllRecipe(String l) throws SQLException {
List<Recipe> titles = new ArrayList<Recipe>();
Cursor cursor = database.query(Helper.TABLE_RECIPES, allColumns,
Helper.COLUMN_TAG + "='" + Recipe.l + "'", null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Recipe title = cursorToRecipe(cursor);
titles.add(title);
cursor.moveToNext();
}
// make sure to close the cursor
cursor.close();
return titles;
}
private Recipe cursorToRecipe(Cursor cursor) {
Recipe title = new Recipe();
title.setId(cursor.getLong(0));
title.setTitle(cursor.getString(1));
return title;
}
这是我的模特课:
public static String l = "chicken";
我的onclicklisteners正在工作,按钮正在工作..我检查了DDMS中的日志,变量l正在改变..唯一的问题是listview没有刷新。
答案 0 :(得分:2)
您正在获得类强制转换异常,因为您将getAllRecipe()(它返回Recipe对象列表)类型转换为Recipe对象(不是Recipe对象列表)。尝试将其更改为
title = (List<Recipe>) datasource.getAllRecipe(Recipe.l);
对于你想要实现的目标,有一个更好的方法,但这应该让你继续前进。希望这会有所帮助。
答案 1 :(得分:1)
ListView
没有刷新,因为您没有在ArrayAdapter
方法中修改代码中任何位置onClick
的内容数组。因此,当调用notifyDataSetChanged
时,它使用相同的旧数组并显示相同的先前内容。
因此没有变化。
尝试在onClick
中为适配器设置新阵列,然后再次呼叫notifyDataSetChanged
。那应该可以解决你的问题。 :)