从片段创建子意图

Posted

技术标签:

【中文标题】从片段创建子意图【英文标题】:Create child Intent from Fragment 【发布时间】:2015-07-07 07:15:38 【问题描述】:

我正在使用 FragmentActivityFragment 之间切换。但我想在片段上有一个管理按钮,当我点击它时,一个新的 fragmentactivity 看起来像一个 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】:

你需要覆盖onCreateOptionsMenuonOptionsItemSelected。在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>

以上是关于从片段创建子意图的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 使用 UITableViewController 创建子菜单

SQL - 分区或循环从主表创建子表[关闭]

创建子类别选择框 onChange

jquery或JS创建子元素并分配一个ID [重复]

从活动接收意图后如何创建片段?

DevExpress TabbedView : 从子窗体创建子窗体