如何从菜单项显示新屏幕

时间:2013-11-24 22:26:46

标签: android android-layout android-fragments actionbarsherlock

我是Android新手,试图在用户点击菜单项中的内容时了解如何显示新屏幕。

我正在使用ActionbarSherlock并查看示例github-android app

当用户点击菜单中的某个项目时,我想向他们显示一个新屏幕。 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;
}

正确的做法是什么?

4 个答案:

答案 0 :(得分:0)

只需使用startActivityForResult

即可

答案 1 :(得分:0)

没有“正确”的方式。 Github代码不首先声明变量。其他的。我相信对于一个菜单,你通常需要将Intent声明为一个局部变量,如果不是一个字段。

答案 2 :(得分:0)

你可以这样做:

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。更多here

就使用getActivity()getApplicationContext()的上下文而言,我更倾向于使用与documentation example类似的当前活动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()总是会工作而不会崩溃,但我觉得它可能会弄乱垃圾收集器并且不会让活动被清除(但不确定)

答案 3 :(得分:0)

创建意图: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,除非您希望在类之间发送值。