2014-07-09 110 views
1

正如標題所說,有沒有人知道如何實現OnBackPressed功能,就像在活動,但在片段視圖? 當我在片段中使用onKey,onKeyDown或onBackPressed時,它不起作用 - 應用程序正在關閉。我想在按下後退按鈕時執行特定的代碼,因爲在其中一個片段中,我有ListView,根據用戶操作填充了數據。OnBackPressed功能片段

所以當按下後退時,我想修改變量的值(「類別」和「部分」),用特定的數據填充ListView(所以修改一些值,因爲用戶點擊了某些東西,並刷新此ListView)感覺用戶正在返回(從部件到類別並關閉應用程序)。

但正如我所提到的,當我使用安其,或onkeydown事件onBackPressed,應用程序正在關閉......例如,當我包括我的片段類:

public void onBackPressed() { 
    Toast.makeText(getActivity(), "AAAA", Toast.LENGTH_LONG).show(); 
} 

吐司不會出現。用「onKeyDown」和「onKey」 - 同樣的情況...我在這裏做錯了什麼,有什麼想法?

+0

郵更少的代碼,所以我們可以幫助您!與我們分享您的問題。 –

回答

1

最後,明白了。 我不得不在我的「ActionBarActivity」中從方法「onNavigationDrawerItemSelected」移動「Fragment newFragment」的聲明到此方法的外部,以使其在整個類中可用。然後,我必須包括「OnBackPressed」在我的「ActionBarActivity」是這樣的:

@Override 
public void onBackPressed() { 
    if (!newFragment.onBackPressed()) { 
     super.onBackPressed(); 
    } 
} 

最後,我在我的片段也包含的onBackPressed:

public boolean onBackPressed() { 
    if (part != -1) { 
     part = -1; 
     toAdd = "" + category + "_"; 
     updateList(); 
     return true; 
    } 
    return false; 
} 

和它的作品就像我想要的。當我推回來,並且當我的Fragment中的變量「part」不是-1時,它執行上面定義的操作,返回true到「ActionBarActivity」,以便應用程序不關閉。但是,當我的Fragment中的變量爲-1時,onBackPressed應用程序將返回到主視圖,並且當用戶推回時,應用程序正在關閉。這就是我想要的! 謝謝大家的幫助!

1

要回答你的第一個森泰斯:

如標題所說,做任何人知道的方式如何實現OnBackPressed 的功能,就像在活動,但在片段查看?

要讓後退按鈕與碎片一起工作,您必須將它們添加到後臺堆棧中。這應該觸發你想要的功能。

// Create new fragment and transaction 
Fragment newFragment = new ExampleFragment(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

// Replace whatever is in the fragment_container view with this fragment, 
// and add the transaction to the back stack 
transaction.replace(R.id.fragment_container, newFragment); 
transaction.addToBackStack(null); 

// Commit the transaction 
transaction.commit(); 
+0

謝謝,有點作品 - 首先我必須改變「getFragmentManager()」到「getSupportFragmentManager()」。現在,當我將片段添加到backstack,並在我的應用程序中按回時,此片段將返回到主片段,而不是關閉該應用程序。但它不執行任何內容,例如,「onKey」方法... –

+0

嘿。如果必須使用getFragmentManager,或者getSupportFragmentNamanger取決於是否使用SupportLibrary。所以它確定你如何解決這個問題。關於另一件事,我想你應該能夠覆蓋至少onBackPressed。如果你當時沒有解決這個問題,我會明天看看這個。現在需要的牀:-) – Senchay

+0

@覆蓋 公共無效onBackPressed(){ 新AlertDialog.Builder(本) .setTitle( 「真的退出?」) .setMessage( 「你確定要退出?」) .setNegativeButton(android.R.string.no,NULL) .setPositiveButton(android.R.string.yes,新DialogInterface.OnClickListener(){ 公共無效的onClick(DialogInterface爲arg0,ARG1 INT){ MainActivity.super。 onBackPressed(); } })。create()。show(); } – Senchay

0
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent register = new Intent(PollCreateCommunities_Activity.this, PollActivity.class); 
    startActivity(register); 
    finish(); 
} 
+1

在兩個代碼中執行此操作ActionbarActivity –

0
public boolean onOptionsItemSelected(MenuItem menuItem) { 
    switch (menuItem.getItemId()) { 
     case android.R.id.home: 
      Intent register = new Intent(PollCreateCommunities_Activity.this, PollActivity.class); 
      startActivity(register); 
      return true; 
    } 
    return (super.onOptionsItemSelected(menuItem)); 
} 
+0

請在您的答案中添加說明,詳細說明爲什麼它可以解決OP的問題。謝謝! –