2014-08-30 2 views
-1

в моем классе FragmnetActivity У меня есть Fragmnet Transaction с 3 fragmnet. , но мой onclick metho не работает должным образом. Он работает только для одного, если и еще условие.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 (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

+0

любая ошибка, то, пожалуйста, показать logcat. – SilentKiller

+0

@silentkiller нет ошибки..app работает..баут каждый раз только работает 2 butttons ... if (v == btnFragment2) { newFragment = new Group_Add_test(); } else { новыйFragment = новый ExpandableListFragment(); } только эти2 состояние только – kosala

ответ

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

0

Из кода, что я могу сделать out каждый раз новыйFragment = новый ExpandableListF ragment(); должно быть выполнено. Ошибка, которую вы выполняете при проверке состояния. if (v == btnFragment1) .... не является правильным способом проверить, был ли клик выбран или нет .... потому что он будет сравнивать ссылки. Решение: если (v.getId() == btnFragment1.getId()) {...

+0

, но sttil он не работает. код не исполняет, если contion if (v.getId() == R.id.btn1) { новыйFragment = new Fragment_addStudentDetails(); «newFragment» переменная naver, использующая эту ошибку, отображается там – kosala

+0

инициализирует новый фрагмент как ** например, фрагмент newFragment = new ExpandableListFragment(); ** перед переключением также должен быть ваш фрагмент switch/if до фрагмента транзакции фрагмента –

0

перед включением случае Fragment newFragment; инициализировать ваш фрагмент

+0

Я добавил ваш ответ, но ... все-таки это не исправить .. сказать «if (v.getId() == R.id.btn1) { newFragment = new Fragment_addStudentDetails();" здесь переменная neroFragment naver использует – kosala

+0

@rahulorry я didint замалчивал его – kosala

+0

использовал ли вы transaction.replace (R.id.myfragment, newFragment); transaction.commit(); иначе его не будет отражать – Rahul