2014-11-03 4 views
0

Я свежий на андроид программирования и в моей простой программе,андроида когда флажок показать фрагмент

Я пытаюсь показать фрагмент, когда CheckBox проверяется и удалить фрагмент, когда CheckBox не проверяется.

В моем коде, когда я проверил CheckBox, фрагмент показан и когда я отключить CheckBox фрагмент удаляется. Однако, когда я пытаюсь показать это снова, я не могу добиться успеха.

это моя часть коды о флажке

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // TODO Auto-generated method stub 

      if(checkBox.isChecked()) 
      { 
       checkBox.setText("It is on."); 
       MyFragment fragment = (MyFragment)getFragmentManager().findFragmentById(R.id.container); 
       if (fragment == null) 
       { 
        getFragmentManager().beginTransaction() 
          .add(R.id.container, new MyFragment()). 
          commit(); 
       } 
      } 

      else 
      { 
       checkBox.setText("It is off."); 

       MyFragment fragment = (MyFragment)getFragmentManager().findFragmentById(R.id.container); 
       if (fragment != null) 
       { 
        getFragmentManager().beginTransaction() 
         .remove(fragment) 
         .commit(); 
        } 
      } 
     } 
    }); 

есть ли кто-нибудь может мне помочь?

+0

с использованием фрагментов скрыть и показать способы решить мою проблему. Спасибо всем – user3251925

ответ

0

Вы не можете, вероятно, добавить его, потому что вы удалили его полностью, попробуйте detatch его. Отделяя его, Фрагмент сохраняет свое состояние.

попробовать это:

getFragmentManager().beginTransaction() 
         .detach(fragment) 
         .commit(); 
        } 

Удалить означает экземпляр фрагмента не может быть повторно прилагается. Вам придется добавить его снова к транзакции фрагмента.

0

попробовать, как это,

@Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // TODO Auto-generated method stub 
       MyFragment fragment = (MyFragment)getFragmentManager().findFragmentById(R.id.container); 
      if(checkBox.isChecked()) 
      { 
       checkBox.setText("It is on."); 

        getFragmentManager().beginTransaction() 
          .add(R.id.container, fragment). 
          commit(); 

      } 

      else 
      { 
       checkBox.setText("It is off.");    
       if (fragment != null) 
       { 
        getFragmentManager().beginTransaction() 
         .remove(fragment) 
         .commit(); 
        } 
      } 
     } 
    }); 
0

попробовать так:

1) Создание макета для фрагмента

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:background="#ff0000"> 
    </LinearLayout> 

2) Создать свой класс фрагмент, который проходит фрагмент

public class MyFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
      return inflater.inflate(R.layout.myfragment, container,false); 
    } 
} 

3) В activity_main.xml положить пустой макет с идентификатором

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="CheckBox" /> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:id="@+id/frag"> 
    </LinearLayout> 
</LinearLayout> 

4) В MainActivity.java, создать объект вашего класса фрагмента затем добавлять и удалять его с FragmentManager

public class MainActivity extends Activity { 

    CheckBox cbox; 
    FragmentManager manager; 
    MyFragment frag; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     manager = (FragmentManager) getFragmentManager(); 
     frag = new MyFragment(); 

     cbox = (CheckBox) findViewById(R.id.checkBox1); 
     cbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(isChecked==true){ 
        manager.beginTransaction().add(R.id.frag, frag).commit(); 
       } 
       else{ 
        manager.beginTransaction().remove(frag).commit(); 
       } 
      } 
     }); 
    } 
} 
Смежные вопросы