我有一个简单的(?)Android应用程序,它以一个Activity(" First Activity")开头,ListView列出了三个项目:Beginning,Intermediate和Advanced。到现在为止还挺好。我接下来要发生的是,如果用户点击例如首先,将查询SQLite数据库并指定所有项目" Beginning"将检索数据库中的数据。然后我想要第二个Activity(" Second Activity")来启动并让查询中的所有项目显示在该Activity上的ListView中。我使用游标工作,但我试图更新我的代码以使用LoaderManager和CursorLoader。我认为我需要在FirstView的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不满意,给了我很多关于不匹配的花括号,缺少分号等的错误消息。那么我做错了什么?单击列表项时如何查询我的数据库?如果我在onItemClick方法之外移动onCreateLoader方法,但是在setItemClickListener中,我没有收到错误消息,但是我如何在onItemClick方法中引用它?
非常感谢任何帮助。非常感谢提前!
非常感谢这两个答案!我是一个Android新手;我试图实施你的建议,再次陷入困境。我创建了一个名为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,我得到一个异常:找不到Activity。我错过了什么?我&#39;
答案 0 :(得分:0)
为了简单起见,将选择传递给第二个活动,而不是光标。 CursorLoader
也适用于不适用于一般游标的内容处理程序。上次我做了这样的事情,我相信我继承了AsyncTaskLoader。
因此,在意图中传递额外的选项,让第二个活动进行查询。
答案 1 :(得分:0)
要回答这个帖子的最后一个问题:
textView1 is a TextView inside a LinearLayout in leveldata.xml in my layout folder. When I try to run this, at startActivity, I get an exception: Activity not found. What am I missing?
您需要在清单中注册新活动。在AndroidManifest文件中使用类似的东西:
<activity android:name="com.my.package.GetLevelData"
android:label="Level Data" />