问题很简单,我并不是Android的新手,但是对于我的生活,我不能检索从活动A到活动B的意图传递的额外内容。
参见活动A:这实际上是一个ListFragment,它实现onListItemClick()以通过intent启动另一个活动。
@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)));
}
}
正如您所看到的,我相信我正在使用正确的代码来获取额外内容,在其他应用程序上使用相同的代码。不确定为什么,当通过intent创建ExpandedTweetView时,所有textView都是空的。请参阅:https://www.dropbox.com/s/pso6jbyn6rpks9n/empty_activity.png
更奇怪的是,我最初尝试通过调用此方法来检查捆绑包是否为空:
if (extras == null) {
Log.v(TAG, "Extras are empty :(");
}
但该行从未执行过,这意味着该bundle不是null。我还认为用于从包中检索单个字符串的键可能不匹配;但是,为了弥补这一点,我决定创建可以在双方使用的常量。正如您在代码中看到的那样,设置Extra的键和检索Extra的键都是相同的。
关于到底发生了什么的任何想法?
答案 0 :(得分:1)
Bundle extras = getIntent().getExtras();
if (extras != null) {
extras = extras.getBundle("KEY_EXTRAS");
String status = extras.getString("KEY_TEXT");
}
答案 1 :(得分:1)
尝试将额外变量添加到intent而不是Bundle中 例如:
i.putExtra(KEY_1, a);
i.putExtra(KEY_2, b);
i.putExtra(KEY_3, c);
然后从意图中的其他活动中检索它 例如:
getIntent().getStringExtra(KEY_1) ;
答案 2 :(得分: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中:
** Bundle bun = getIntent()。getBundleExtra(“bundle”);
if(bun.containsKey(“thisc”)){
Log.i("TAG", bun.getString("thisc"));
}其他{
Log.i("TAG", "no thisc");
} **
检查活动B中的第一行代码,实际上是主要区别 !!
答案 3 :(得分: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();
答案 4 :(得分:0)
如果你想要的数据数量从一个活动共享到其他活动,很难保持对Bundle和Bundle to Intent的意图。
只需使用具有不同参数的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");
我认为你很容易将你的数据从一个Activity转移到另一个Activity。