我是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;
}
正确的做法是什么?
答案 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
,除非您希望在类之间发送值。