2

質問は簡単です。私はAndroidにまったく慣れていませんが、アクティビティAからアクティビティBにインテントを介して渡されたエクストラを取得することはできません。

アクティビティAを参照してください。これは実際にはListFragmentであり、onListItemClick()を実装して、インテントを介して別のアクティビティを開始します。

@Override 
public void onListItemClick(ListView l, View v, int position, long id) {
    Log.i("FragmentList", "Item clicked: " + id); 
    Intent i = new Intent(getActivity(), ExpandedTweetView.class);
    twitter4j.Status status = adapter.getItem(position);

    Bundle extras = new Bundle();
    extras.putString(KEY_TEXT, status.getText());
    extras.putString(KEY_HANDLE, status.getUser().getScreenName());
    extras.putString(KEY_NAME, status.getUser().getName());
    extras.putString(KEY_TIMESTAMPS, status.getCreatedAt().toString());
    extras.putLong(KEY_RETWEETS, status.getRetweetCount());

    i.putExtra(KEY_EXTRAS, extras);
    startActivity(i);
}

この部分は正常に機能します。Log.v(TAG、 "status.getText()"を使用してテストし、getItem()を介して空のアイテムを渡すアダプターからエラーが発生していないことを確認しました。

アクティビティBのコードは次のとおりです。

public class ExpandedTweetView extends Activity {

TextView text;
TextView name;
TextView handle;
TextView createdAt;
TextView retweets;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.expanded_list_item);

    Bundle extras = getIntent().getExtras();

    ActionBar actionBar = getActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(true);

    text = (TextView) findViewById(R.id.h_content);
    name = (TextView) findViewById(R.id.h_name);
    handle = (TextView) findViewById(R.id.h_handle);
    createdAt = (TextView) findViewById(R.id.h_timestamp);
    retweets = (TextView) findViewById(R.id.h_retweet_count);

    if(extras != null) {
        text.setText(extras.getString(TimelineFragment.KEY_TEXT));
        name.setText(extras.getString(TimelineFragment.KEY_NAME));
        handle.setText(extras.getString(TimelineFragment.KEY_HANDLE));
        createdAt.setText(extras.getString(TimelineFragment.KEY_TIMESTAMPS));
        retweets.setText(String.valueOf(extras.getLong(TimelineFragment.KEY_RETWEETS)));
    }
}

ご覧のとおり、他のアプリケーションで同じコードを使用して、エクストラを取得するために適切なコードを使用していると思います。ExpandedTweetViewがインテントを介して作成された場合、すべてのtextViewが空になる理由はわかりません。参照:https ://www.dropbox.com/s/pso6jbyn6rpks9n/empty_activity.png

さらに奇妙なのは、最初にこれを呼び出してバンドルがnullかどうかを確認しようとしたことです。

if (extras == null) {
Log.v(TAG, "Extras are empty :(");
}

しかし、その行は実行されませんでした。つまり、バンドルはnullではありません。また、バンドルから個々の文字列を取得するために使用されているキーが一致していない可能性があると思いました。しかし、それを改善するために、両側で使用できる定数を作成することにしました。コードからわかるように、Extraを設定するためのキーとExtraを取得するためのキーはどちらも同じです。

一体何が起こっているのかについて何かアイデアはありますか?

4

5 に答える 5

2
Bundle extras = getIntent().getExtras();
        if (extras != null) {
            extras = extras.getBundle("KEY_EXTRAS");
            String status = extras.getString("KEY_TEXT");
        }
于 2012-11-05T06:11:45.227 に答える
1

バンドル例ではなく、インテントに変数を追加してみてください。

 i.putExtra(KEY_1, a);
 i.putExtra(KEY_2, b);
 i.putExtra(KEY_3, c); 

次に、インテントExから他のアクティビティからそれを取得します。

  getIntent().getStringExtra(KEY_1) ;
于 2012-11-05T06:16:04.840 に答える
1

アクティビティA:

    Intent i = new Intent(MainActivity.this, AnotherActivity.class);
    Bundle b = new Bundle();
    b.putString("thisc", "my name");
    i.putExtra("bundle", b);
    startActivity(i);

アクティビティB:

**バンドルbun=getIntent()。getBundleExtra( "bundle");

if(bun.containsKey( "thisc")){

Log.i("TAG", bun.getString("thisc"));

} そうしないと {

Log.i("TAG", "no thisc");

} **

アクティビティBのコードの最初の行を確認してください。これが、実際の主な違いです。

于 2012-11-05T06:50:19.137 に答える
0
//put value
    Intent inatent = new Intent(this,text.class);
    inatent_logo.putExtra("message","hello");
    startActivity(inatent);

//get vale
    String msg  = getIntent().getStringExtra("message").toString();
于 2012-11-05T06:22:33.143 に答える
0

あるアクティビティから他のアクティビティに共有したいデータの数がある場合、バンドルする意図と意図するバンドルを維持することは困難です。

単にPuExtra() 異なる引数でIntentを使用するだけです。

次のような意図でデータの数を渡すことができます:

送信者側:

インテントを作成します。

Intent My_Intent = new Intent(FromClass.this,ToClass.class);

他のアクティビティと共有したい価値を追加します。

My_Intent.putExtra("VAR_A",a_value);
My_Intent.putExtra("VAR_B",b_value);
My_Intent.putExtra("VAR_C",c_value);

あなたの意図を呼び出します。

StartActivity(My_Intent);

レシーバー側:

Intent My_Intent = getIntent(); 
First_Value=My_Intent.getStringExtra("VAR_A");
Sec_Value=My_Intent.getStringExtra("VAR_B");
Thred_Value=My_Intent.getStringExtra("VAR_C");

あるアクティビティから別のアクティビティにデータを処理するのは簡単だと思います。

于 2012-11-05T06:32:30.847 に答える