2014-08-30 111 views
-1

在我的FragmnetActivity類中,我有3個fragmnet的Fragmnet事務。 但我的onclick方法不能正常工作。它只爲一個if和else condition.my工作,如果條件不工作。片段事務無法正常工作

什麼即時做錯了..

public class Indi_Add_Details_menu extends FragmentActivity{ 

Fragment fragment; 
Button btnFragment1, btnFragment2, btnFragment3, btnFragment4; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_detal_menu); 
    btnFragment1 = (Button)findViewById(R.id.btn1); 
    btnFragment2 = (Button)findViewById(R.id.btn2); 
    btnFragment3 = (Button)findViewById(R.id.btn3); 
    btnFragment4 = (Button)findViewById(R.id.btn4); 

    btnFragment1.setBackgroundResource(R.drawable.add_sbutton_pressed); 
    btnFragment2.setBackgroundResource(R.drawable.add_tbutton_pressed); 
    btnFragment3.setBackgroundResource(R.drawable.add_pbutton_pressed); 
    btnFragment4.setBackgroundResource(R.drawable.view_button_pressed); 

    // get an instance of FragmentTransaction from your Activity 
    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

    //add a fragment 
    Fragment_addStudentDetails myFragment = new Fragment_addStudentDetails(); 
    fragmentTransaction.add(R.id.myfragment, myFragment); 
    fragmentTransaction.commit(); 

    btnFragment1.setOnClickListener(btnFragmentOnClickListener); 
    btnFragment2.setOnClickListener(btnFragmentOnClickListener); 
    btnFragment3.setOnClickListener(btnFragmentOnClickListener); 
    btnFragment4.setOnClickListener(btnFragmentOnClickListener); 
} 

Button.OnClickListener btnFragmentOnClickListener = new Button.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 

     Fragment newFragment; 

     // Create new fragment 
     if(v == btnFragment1){ 
      newFragment = new Fragment_addStudentDetails(); 

     }if(v == btnFragment2){ 
      newFragment = new Group_Add_test(); 

     }else{ 
      newFragment = new ExpandableListFragment(); 
     } 

     // Create new transaction 
     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.myfragment, newFragment); 
     transaction.addToBackStack(null); 

     // Commit the transaction 
     transaction.commit(); 
    }}; 
public void showDatePickerDialog(View v) { 
    new DatePickerFragment((EditText) v).show(getFragmentManager(), "datePicker"); 
} 

} 

當我再添加switch語句像這樣

switch (v.getId()){ 
      case R.id.btn1: 
       newFragment = new Fragment_addStudentDetails(); 
       break; 
      case R.id.btn2: 
       newFragment = new Group_Add_test(); 
       break; 
      case R.id.btn3: 
       newFragment = new ExpandableListFragment(); 
       break; 
      default: 
       break; 
     } 

logcat中說,

Error:(80, 50) error: variable newFragment might not have been initialized 
+0

@ rod-algonquin你能幫我解決這個問題嗎? – kosala 2014-08-30 06:16:35

+0

任何錯誤,請顯示logcat。 – SilentKiller 2014-08-30 06:17:04

+0

@silentkiller沒有error..app運行..但每次只工作2 butttons ... if(v == btnFragment2){ newFragment = new Group_Add_test(); } else { newFragment = new ExpandableListFragment(); } 這兩個條件只有 – kosala 2014-08-30 06:18:26

回答

0

這個工作

@Override 
    public void onClick(View v) { 

     Fragment newFragment; 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
     switch (v.getId()){ 
      case R.id.btn1: 
       newFragment = new Fragment_addStudentDetails(); 
       transaction.replace(R.id.myfragment, newFragment); 
       transaction.addToBackStack(null); 
       transaction.commit(); 
       break; 
      case R.id.btn2: 
       newFragment = new Group_Add_test(); 
       transaction.replace(R.id.myfragment, newFragment); 
       transaction.addToBackStack(null); 
       transaction.commit(); 
       break; 
      case R.id.btn3: 
       newFragment = new ExpandableListFragment();     
       transaction.replace(R.id.myfragment, newFragment); 
       transaction.addToBackStack(null); 
       transaction.commit(); 
       break; 
      default: 
       break; 
     } 
    }}; 
+1

祝你好運;-)! – mmlooloo 2014-08-30 16:13:08

0

從你的代碼是什麼我可以做out每次都是newFragment = new ExpandableListF ragment();必須執行。 您在兩項條件檢查中所犯的錯誤。 if(v == btnFragment1) ....不正確的方法來檢查視圖是否被點擊或不....因爲它會比較參考。 解決方案如果(v.getId()== btnFragment1.getId()){...

+0

但它仍然不工作。如果(v.getId()== R.id.btn1){ newFragment = new Fragment_addStudentDetails();如果(v.getId()== R.id.btn1)代碼不執行此操作。 「newFragment」變量naver使用此錯誤顯示在那裏 – kosala 2014-08-30 07:11:28

+0

將newFragment初始化爲**例如Fragment newFragment = new ExpandableListFragment(); **在切換之前,您的switch/if條件片段必須存在於片段事務片段之前 – 2014-08-30 07:20:33

0

之前開關罩Fragment newFragment;初始化片段

+0

我添加了你的答案,但是它仍然沒有修復..它說「如果(v.getId()== R.id.btn1){newFragment = new Fragment_addStudentDetails();」在這裏「newFragment」變量naver使用 – kosala 2014-08-30 07:07:20

+0

@rahulorry我didint瞭解它 – kosala 2014-08-30 07:13:19

+0

你使用transaction.replace(R.id.myfragment,newFragment);transaction.commit();否則你不會反映 – Rahul 2014-08-30 07:16:33