我有一个简单的(?)Android 应用程序,它以 Activity(“第一个 Activity”)开头,ListView 列出了三个项目:Beginning、Intermediate 和 Advanced。到目前为止,一切都很好。接下来我想要发生的是,如果用户单击开始,将查询 SQLite 数据库,并检索数据库中指定为“开始”的所有项目。然后,我希望启动第二个 Activity(“第二个 Activity”)并将查询中的所有项目显示在该 Activity 的 ListView 中。我使用游标进行这项工作,但我正在尝试更新我的代码以使用 LoaderManager 和 CursorLoader。我认为我需要在第一个活动中的 ListView 的 onItemClick 方法中放置一个 onCreateLoader 方法。举个例子,我正在考虑这样的代码:
public class FirstActivity extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView listview = getListView();
String[] values = new String[] {
"Beginning", "Intermediate", "Advanced"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(this, <myUri>,
<myFields>, <myQuery>, null, null);
}
}
});
}
}
同样在我的 onClickItem 中,我将创建一个 Intent 并用一束数据填充它(我的第二个 Activity 的 ListView 将需要此数据用于其 onItemClick 方法)。无论如何,当我尝试这个时,Eclipse 对 onItemClick 中的 onCreateLoader 不满意,给了我很多关于不匹配的花括号、缺少分号等的错误消息。那么我做错了什么?单击列表项时如何查询我的数据库?如果我将 onCreateLoader 方法移到 onItemClick 方法之外,但在 setItemClickListener 内,我不会收到错误消息,但是如何在我的 onItemClick 方法中引用它?
任何帮助是极大的赞赏。提前谢谢了!
非常感谢这两个答案!我是安卓新手;我正在尝试实施您的建议并再次陷入困境。我创建了一个名为 GetLevelData 的新 Activity。我的第一个活动现在看起来像这样:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView listview = getListView();
final String[] values = new String[] {
"Beginning", "Intermediate", "Advanced"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Intent choice = new Intent(getApplicationContext(), com.MyProject.project.GetLevelData.class);
Bundle dataBundle = new Bundle();
String chosenValue = values[position];
dataBundle.putString("Level",chosenValue);
choice.putExtras(dataBundle);
try {
startActivity(choice);
} catch (Exception e) {
Dialog d = new Dialog(getApplicationContext());
d.setTitle("MyProjectActivity line 60");
TextView tv = new TextView(getApplicationContext());
tv.setText(e.toString());
d.setContentView(tv);
d.show();
} finally {
}
}
});
}
我的新活动如下所示:
public class GetLevelData extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.leveldata);
Intent myData = getIntent();
Bundle info = myData.getExtras();
if (info != null){
TextView myTextView = (TextView)findViewById(R.id.textView1);
String level = info.getString("Level");
myTextView.setText(level);
}
}
}
textView1 是我的布局文件夹中 leveldata.xml 中 LinearLayout 内的 TextView。当我尝试运行它时,在 startActivity 中,我得到一个异常:找不到活动。我错过了什么?我'