список и фрагменты - PullRequest
       0

список и фрагменты

0 голосов
/ 25 июня 2011

Дело в том, что я создаю сотовое приложение и не могу переключаться между фрагментами. Вот мой основной код:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    list = (ListView)findViewById(R.id.list);
    A = new FragmentA();
    B = new FragmentB();
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
    list.setAdapter(adapter);
    list.setOnItemClickListener(mylistener);
}

public void changeFragment(Fragment f){
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.fragment, f);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.addToBackStack(null);
    ft.commit();
}

   public OnItemClickListener mylistener = new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        switch(position){
        case 0 : changeFragment(A); 
            break;
        case 1 : changeFragment(B); 
            break;
        }

    }
};

Я знаю, прежде чем поставить «заменить», я должен удалить, но как я могу удалить тот, в котором я уже? Что говорит мне в журнале: У указанного ребенка уже есть родитель. Сначала вы должны вызвать removeView () у родителя ребенка.

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Взгляните на пример демонстрации API FragmentLayout, поскольку он делает нечто похожее на то, что вы хотите, я верю. Нет ничего плохого в вызове replace для загрузки первого фрагмента, как показывает этот пример.

Во-первых, добавьте некоторую защиту, чтобы при нажатии на ту же запись списка вы не перезагружали один и тот же фрагмент.

Во-вторых, будьте осторожны при ведении ссылок на фрагменты, см. ссылка . Вы можете каждый раз воссоздавать фрагменты или использовать remove и add вместо replace.

0 голосов
/ 25 июня 2011

Проблема не в удалении фрагмента.Метод replace удаляет существующий.

Я предполагаю, что проблема заключается в доступе к фрагменту внутри слушателя.Попробуйте создать новый фрагмент внутри самого слушателя.Пожалуйста, отправьте полный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...