0

A1 と A2 という 2 つのアクティビティがあり、どちらにも 2 つの編集テキスト フィールドがあり、1 つはタイトル用、もう 1 つはストーリー用です。ユーザーがアクティビティ A1 の両方のテキスト フィールドにテキストを入力し、保存ボタンを押すと、エントリがリスト ビューに保存されます。ユーザーが保存したエントリをもう一度クリックすると、タイトルとストーリーがアクティビティ A2 のタイトルとストーリーのテキスト フィールドに表示されます。アクティビティ A2 でタイトルを取得していますが、ストーリー部分が表示されない理由がわかりません。

項目がクリックされたときのアクティビティ A1 のコードを次に示します。

static String title = "";
static String story = "";

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // here arg3 is the id of the item which is pressed
    registerForContextMenu(arg1);
    id_item_clicked = arg3;
    position_item = arg2;
    Cursor c = (Cursor) arg0.getItemAtPosition(arg2);
    title = c.getString(c.getColumnIndex(DataHolder.KEY_TITLE));
    story = c.getString(c.getColumnIndex(DataHolder.KEY_STORY));
    Intent i = null;

    // remove this toast later
    Toast.makeText(DiaryActivity.this, "TestClick", Toast.LENGTH_SHORT).show();

    try {
        i = new Intent(A1.this,
                Class.forName("com.android.project.A2"));
        i.putExtra(ROW_ID, arg3);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    startActivity(i);
}

2 つのテキスト フィールドにテキストを表示するアクティビティ A2 のコードを次に示します。

EditText title_read, display_story_read;
private long rowId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.readdata);

    // bundle receives the row id of the item clicked
    Bundle extras = getIntent().getExtras();

    rowId = extras.getLong("row_id");

    setupVaiables();

    title_read.setText(A1.title);
    display_story_read.setText(A1.story);
}

タイトルは表示されていますが、ストーリー部分は表示されていません。これで私を助けてください。私は何時間も試してきました。また、質問に対する返信が少ない理由を誰か教えてもらえますか?

4

1 に答える 1

0

このような方法で変数を渡すことは悪い習慣です。インテントを介して変数を渡すことができます。

i.putExtra(TITLE_KEY, title);
i.putExtra(STORY_KEY, story);

または、A1 ではなく、アクティビティ A2 でデータベースからタイトルとストーリーを取得します。

そのストーリー フィールドは DB に書き込まれていますか? 入手したストーリーの価値を確認し、ログやトーストに書き込んでください。


補足: クラスからインテントを作成できます。

Intent i = new Intent(A1.this, A2.class);

この場合、try..catchブロックは必要ありません。

于 2012-05-25T12:57:16.427 に答える