从片段创建子意图
Posted
技术标签:
【中文标题】从片段创建子意图【英文标题】:Create child Intent from Fragment 【发布时间】:2015-07-07 07:15:38 【问题描述】:我正在使用 FragmentActivity 在 Fragment 之间切换。但我想在片段上有一个管理按钮,当我点击它时,一个新的 fragment 或 activity 看起来像一个 child (使用操作栏中的返回按钮)。
我该怎么做?
这是我的代码,它可以工作,但是后退按钮没有出现在操作栏中:
片段:
public class Reports extends Fragment
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
super.onCreate(savedInstanceState);
if (container == null)
return null;
public void onClick(View v)
Intent intent = new Intent(getActivity(), LoginActivity.class);
getActivity().startActivity(intent);
);
活动(目前......但如果我们需要,也许是片段?):
public class LoginActivity extends ActionBarActivity
public static final String TAG = LoginActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
Button loginButton = (Button) findViewById(R.id.loginButton);
loginButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
TextView emailText = (TextView) findViewById(R.id.emailText);
TextView passwordText = (TextView) findViewById(R.id.passwordText);
ParseUser.logInInBackground(emailText.getText().toString(), passwordText.getText().toString(), new LogInCallback()
public void done(ParseUser user, ParseException e)
if (user != null)
Log.i(TAG, "Yeahhh Login OK");
finish();
else
runOnUiThread();
);
);
也许我必须更改 Manifest 中的某些内容?
【问题讨论】:
【参考方案1】:如果你开始一个new Activity
,你可以通过在onCreate()
方法中写shouldDisplayHomeUp();
来启用后退按钮,在后面应该带你到前面的活动回栈。
在添加new Fragment
的另一种情况下,您可以查看此answer 以供参考,因为它提到当您添加new Fragment
时,您可以像这样将其添加到back stack
getSupportFragmentManager().beginTransaction()
.add(detailFragment, "detail")
// Add this transaction to the back stack
.addToBackStack()
.commit();
这将使后退按钮将您带到您以前的Fragment
【讨论】:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);工作正常,后退按钮出现,但当我点击它时没有任何反应...... 在 Activity 中,您可以覆盖 onBackPressed() 并返回片段 Activity,也可以将具有初始片段的主 Activity 设置为清单中的父级 我不是很明白,我只是添加了getSupportActionBar().setDisplayHomeAsUpEnabled(true);在我的活动中显示后退按钮。但是当我点击后退按钮时,我希望它回到我的片段。我怎样才能做到这一点?谢谢你的帮助......! 好吧,我添加了这个:public boolean onOptionsItemSelected(MenuItem item) finish();返回 super.onOptionsItemSelected(item); 您可以通过添加“case android.R.id.home:”来覆盖 ActionBar 后退按钮,正如@Rodolfo Perottoni 提到的,您还应该添加“android:parentActivityName="com.example.YOUR APP .your FragmentActivity" >" 到您的新活动清单【参考方案2】:你需要覆盖onCreateOptionsMenu
和onOptionsItemSelected
。在onCreateOptionsMenu
方法中执行以下操作: 将菜单膨胀到操作栏中。您可以在res/menu
文件夹下定义菜单项的内容。
接下来在onOptionsItemSelected
方法中,您可以处理在操作栏中添加的后退按钮的点击。还要记住一件事。在清单中,请使用其中包含操作栏的主题。
示例:在应用程序标签下使用
android:theme="@android:style/Theme.Light"
而不是 android:theme="@android:style/Theme.Light.NoTitleBar
【讨论】:
【参考方案3】:您需要做的就是在您当前所在的活动中启用它。
在FragmentActivity
内时:getActionBar().setHomeAsUpEnabled(boolean)
。
否则,在Fragment
: getActivity().getActionBar().setHomeAsUpEnabled(boolean)
内。
【讨论】:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);工作正常,出现后退按钮,但是当我点击它时没有任何反应...... 哦。差点忘了:清单中的 Activity 必须声明android:parentActivityName
属性,其值必须是 Activity 类的完整规范名称。更多信息:Android Developers - <activity>以上是关于从片段创建子意图的主要内容,如果未能解决你的问题,请参考以下文章