2014-02-09 3 views
0

У меня есть пейджер с представлением, в котором есть 3 фрагмента.
Однако первый фрагмент имеет listview.
Я хочу открыть новый фрагмент, когда я нажимаю элемент ListView.
я был в состоянии сделать его работу succefully с этим кодом:Открытие фрагмента в другом фрагменте

Fragment FullBrand = new FullBrand(); 
FragmentTransaction ft = getFragmentManager() 
     .beginTransaction(); 
ft.replace(R.id.framebrands, FullBrand); 
Bundle bundle = new Bundle(); 
FullBrand.setArguments(bundle); 
ft.addToBackStack(null); 
ft.commit(); 

Однако, когда новый фрагмент запусках, то ViewPager все еще там!
Что делать? как я могу избавиться от них?
Спасибо!

ответ

1

Похоже, вы пытаетесь заменить один фрагмент внутри пейджера представления.

Если вы хотите заменить фрагмент пейджера представления (с его 3-мя дочерними элементами) и показать другой фрагмент, вам нужно вызвать транзакцию в FragmentActivity и заменить его в текущем контейнере.

Добавить обратный вызов в действие и заменить весь контейнер в активности при щелчке по элементу списка.

Пример для добавления слушателя

в вид фрагмента пейджера, объявить интерфейс:

public interface OnViewPagerClickListener { 
    public void onBlaBla(Object arg); 
} 

в вашем Фрагмент активность:

public class MyFragmentActivity implement ViewPagerFragment.OnViewPagerClickListener 

в вашем вид пейджера фрагмента переопределение onAttach & объявить член интерфейса

private OnViewPagerClickListener mCallback; 

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     mCallback =(OnViewPagerClickListener) activity **try catch this code** 
    } 

И куда вы хотите позвонить mCallback.onBlaBla (...) и делать все остальное в деятельности .... Это очень кратко урок для интерфейсов :)

Более подробную информацию об интерфейсе и callback here Удачи.

+0

Да, точно, это то, что я пытаюсь сделать. Можете ли вы предложить более подробную информацию о том, как добавить обратный вызов к активности? – Fringo

+0

см. Мой ответ на вопрос –

+0

эй, я сделал то, что вы мне сказали, и это сработало.но у меня проблема, когда пользователь нажимает кнопку «Назад», она выходит из приложения вместо того, чтобы отнести его к предыдущему фрагменту. Есть идеи? – Fringo

1

Вы не должны пытаться удалить ViewPager, а лучше вы можете показать новый фрагмент (i.e FullBrand) в DialogFragment. Так что если вы нажмете назад она принесет вам только старый ViewPager, он не будет выйти из приложения

Чтобы показать диалоговый фрагмент с FullScreen попробуйте следующий код:

public class NewFragment extends DialogFragment { 

private Dialog dialog; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.new_fragment_xml_here, container, 
      false); 

    return view; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    dialog = new Dialog(getActivity(), 
      android.R.style.Theme_Black_NoTitleBar); 
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

    return dialog; 
    } 
} 

Затем называют эту NewFragment от вашего пункта ListView нажмите, чтобы показать это, как NewScreen, который будет выглядеть как новый экран:

NewFragment fragment = new NewFragment(); 
fragment.show(fragmentManager, "NewFragment"); 

Я надеюсь, что это поможет вам.

Смежные вопросы