0

初級、中級、上級の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で例外が発生します:アクティビティが見つかりません。私は何が欠けていますか?私'

4

2 に答える 2

0

簡単にするために、カーソルではなく、2番目のアクティビティに選択肢を渡します。またCursorLoader、一般カーソル用ではなく、コンテンツハンドラー用です。前回このようなことをしたときは、AsyncTaskLoaderを継承したと思います。

したがって、インテントのエクストラで選択肢を渡し、2番目のアクティビティにクエリを実行させます。

于 2012-10-16T22:21:54.400 に答える
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" />
于 2013-08-06T13:38:20.573 に答える