繁体   English   中英

如何从菜单项显示新屏幕

[英]How to show a new screen from menu item

我是android的新手,它试图找出当用户单击菜单项中的内容时如何显示新屏幕的方法。

我正在使用ActionbarSherlock并查看示例github-android应用程序

当用户单击菜单中的项目时,我想向他们显示一个新屏幕。 Github代码这样做是这样的:

startActivityForResult(new Intent(getActivity(), CreateGistActivity.class), GIST_CREATE);

但是我看过一些代码示例:

Intent i = new Intent(getApplicationContext(), SomeActivity.class);

我的代码如下所示:

public class MainActivity extends SherlockActivity {
 ....
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.create) {
        //show createactivity class
        return true;
    }
    return true;
}

正确的做法是什么?

只需使用startActivityForResult

没有“正确”的方法。 Github代码没有首先声明变量。 花药做。 我相信对于菜单,通常需要将Intent声明为局部变量(如果不是字段)。

您可以这样做:

public class MainActivity extends SherlockActivity {
 ....
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.create) {
        //show createactivity class
        Intent i = new Intent(MainActivity.this, SomeActivity.class);
        startActivity(i); 
        return true;
    }
    return true;
}

当您必须像用户选择一样将一些值/数据返回到第一个屏幕时,将使用startActivityForResult 这里更多

至于使用getActivity()getApplicationContext()的上下文,我更喜欢使用当前活动MainActivity.this的上下文。这更类似于文档示例

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

在片段内部使用getSherlockActivity()而不是getActivity()因为getActivity()可能导致旧设备崩溃。

当然, getApplicationContext()总是可以工作,并且不会崩溃,但是我觉得它可能会使垃圾收集器混乱,并且不要让活动被清除(但不确定)

创建一个意图: Intent i = new Intent(MainActivity.this, CreateGistActivity.class); 其中MainActivity是您所在的活动,而CreateGistActivity是您要启动的类。

然后使用startActivity(Intent)启动新活动: startActivity(i);

或者只是将它们结合起来:

startActivity(new Intent(MainActivity.this, CreateGistActivity.class));


完整代码:

public class MainActivity extends SherlockActivity {
 ....

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.create) 
    {
        Intent i = new Intent(MainActivity.this, CreateGistActivity.class);  
        startActivity(i);          

        return true;
    }
    return true;
}


在您的情况下,可能不需要startActivityForResult ,除非您期望在类之间发送值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM