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