初級、中級、上級の3つの項目を一覧表示するListViewを備えたアクティビティ(「最初のアクティビティ」)で始まる単純な(?)Androidアプリケーションがあります。ここまでは順調ですね。次に実行したいのは、ユーザーが「Beginning」をクリックすると、SQLiteデータベースが照会され、データベースで「Beginning」と指定されたすべてのアイテムが取得されることです。次に、2番目のアクティビティ(「2番目のアクティビティ」)を起動して、クエリのすべてのアイテムをそのアクティビティのリストビューに表示します。カーソルを使用してこれを機能させていますが、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で、インテントを作成し、データのバンドルを詰め込みます(2番目のアクティビティのListViewは、onItemClickメソッドにこのデータを必要とします)。とにかく、これを試してみると、EclipseはonItemClick内のonCreateLoaderに不満を持っており、中括弧の不一致、セミコロンの欠落などに関するエラーメッセージがたくさん表示されます。リストアイテムがクリックされたときにデータベースにクエリを実行するにはどうすればよいですか?onCreateLoaderメソッドをonItemClickメソッドの外に移動したが、setItemClickListener内に移動した場合、エラーメッセージは表示されませんが、onItemClickメソッド内でそれを参照するにはどうすればよいですか?
どんな助けでも大歓迎です。よろしくお願いします!
両方の回答をありがとうございました!私はAndroidの初心者です。私はあなたの提案を実行しようとしていますが、もう一度行き詰まっています。GetLevelDataという新しいアクティビティを作成しました。私の最初のアクティビティは次のようになります。
@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で例外が発生します:アクティビティが見つかりません。私は何が欠けていますか?私'