簡體   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