[英]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.