问题很简单,我对Android并不完全陌生,但我不能在我的生活中检索通过活动A向活动B传递的附加内容。getIntent.getExtras()不返回空值,但没有值。
请参阅活动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);
}
这部分只是工作,我测试了它USNG 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和Key以检索Extra的键都是相同的。
任何想法到底是怎么回事?
您可以检查并打印'extras.isEmpty()'的结果。 – varevarao
看看我的回答... –