通过活动,我曾经这样做:
在活动1中:
Intent i = new Intent(getApplicationContext(), MyFragmentActivity.class);
i.putExtra("name", items.get(arg2));
i.putExtra("category", Category);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
在活动2中:
Item = getIntent().getExtras().getString("name");
Run Code Online (Sandbox Code Playgroud)
你是如何使用Fragments做到这一点的?我也在使用兼容性库v4.
它是否属于FragmentActivity?还是实际的碎片?它采用哪种方法?的onCreate?onCreateView?另一个?
我可以看一下示例代码吗?
编辑:值得注意的是我试图将Activity 1保持为Activity(或者实际上是ListActivity,我点击时传递listitem的意图)然后传递给一组tabbed-fragments(通过Fragment Activity)和我需要任何一个标签才能获得额外的东西.(我希望这可能吗?)
我有两个活动.说Activity A和Activity B.
从Activity A我单击按钮启动Activity B这是我用于此的代码:
Intent intent = new Intent(this, ActivityB.class);
this.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
Activity B.在on create方法中Activity B,我启用了向上按钮.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_news);
getActionBar().setDisplayHomeAsUpEnabled(true); //Here//
}
Run Code Online (Sandbox Code Playgroud)
并在"向上"按钮的事件句柄上,我有这个代码:
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case android.R.id.home:
finish();
NavUtils.navigateUpFromSameTask(this);
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
Activity A单击操作栏中的向上按钮,如下所示:
现在问题是,当我点击"向上按钮"时,它返回到Activity A哪个很好,但它重新启动它.怎么能让它停止重启?我只想让它恢复.
当我使用我的硬件后退按钮时,它按预期工作.即它转到Activity A并恢复它而不是重新启动它.
我希望我的活动恢复,因为在那个活动上,我在网上下载了一些字符串,因此我不希望它在用户从活动B开始时继续下载数据- >活动A
我使用ActionBarSherlock(虽然我不认为这很重要).
我有一个主要活动和一个关于活动.我希望About活动通过其徽标显示后箭头,并执行适当的动画等.我不知道如何正确地做到这一点.
目前,我在onOptionsMenuItemSelected下按下Up/Home按钮时启动Main活动,但是它很hacky并且不能正常工作.它播放错误的动画,并且处理多任务处理不佳.
我该如何正确设置?
这是我的Main活动中启动About的部分:
Intent aboutIntent = new Intent(MainActivity.this, About.class);
MainActivity.this.startActivity(aboutIntent);
Run Code Online (Sandbox Code Playgroud)
这是我的关于活动:
package com.stevenschoen.test;
import android.content.Intent;
import android.os.Bundle;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.MenuItem;
public class About extends SherlockActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intentHome = new Intent(this, MainActivity.class);
intentHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentHome);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Run Code Online (Sandbox Code Playgroud) 一个应用程序有2个活动,A和B.
A具有保存的实例数据
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("foo", 0);
}
Run Code Online (Sandbox Code Playgroud)
和A有
int bar;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
if (savedInstanceState != null) {
bar = savedInstanceState.getInt("foo");
} else {
bar = -1;
}
}
Run Code Online (Sandbox Code Playgroud)
恢复数据.
活动B启用了操作栏
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
// ...
}
Run Code Online (Sandbox Code Playgroud)
启用导航.A也被列为B的父活动AndroidManifest.xml.
当用户从A导航到B时onSaveInstanceState,如果他们导航回A使用后退按钮活动,则A正确恢复其保存的信息.
但是,当用户从A导航到B时onSaveInstanceState,然后使用向上导航返回到A,即使保存了信息,onCreate(Bundle savedInstanceState)也会传递null.
如何启动导航以传递创建的Bundle onSaveInstanceState?
我在Android 4.0.3(冰淇淋三明治)中开发了一个应用程序,我正在使用两个活动来测试活动导航.但我在活动导航中观察到了不同的行为.
我从活动A调用活动B.在活动B中,我只是调用finish()方法.这样我们就可以看到Previous Activity A.它完全按预期工作但问题是后退导航(调用完成方法或按后退键),它调用onCreate()方法的Activity A而不是调用onResume( ).但在以前的版本中,它的表现并不像这样.这是android 4.0中的新实现吗?
以下是我实施的示例:
Activity_A:
public class Activity_A extends Activity {
/** Called when the activity is first created. */
static int count=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView text=(TextView)findViewById(R.id.textcontent);
text.setText("Activity 1 called:"+(++count)+" Times");
}
public void onClick(View v)
{
Intent intent=new Intent(this,Activity2.class);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("onActivityResult", "Called with Code:"+resultCode);
}
}
Run Code Online (Sandbox Code Playgroud)
Activity_B:
public class Activity_B extends Activity {
/** Called when …Run Code Online (Sandbox Code Playgroud)