2015-02-05 2 views
1

У меня есть 2 Fragments - ButtonFragment и ListViewFragment - in my ActivityMainActivity.Как показать/скрыть фрагмент на кнопке

ButtonFragment содержит Button, ListViewFragment содержит ListView.

Каждый раз, когда я нажимаю на ButtonFragmentButton, я хочу, чтобы ListViewFragment показать/скрыть.

Как это правильно закодировать?

В настоящее время мой код выглядит следующим образом:

MainActivity.java

public class MainActivity extends Activity implements Communicator { 

    ButtonFragment buttonFrag; 
    ListViewFragment listviewFrag; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     buttonFrag= new ButtonFragment(); 
     listviewFrag = new ListViewFragment(); 

     manager = getFragmentManager(); 
     FragmentTransaction transaction = manager.beginTransaction(); 
     transaction.add(R.id.button_fragment, buttonFrag, "Fragment1"); 
     transaction.add(R.id.listview_fragment, listviewFrag, "Fragment2"); 
     transaction.commit(); 
    } 

} 

ButtonFragment.java

public class DynamicButtonsFragment extends Fragment implements View.OnClickListener { 

    Button btn; 

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

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    } 

    @Override 
    public void onClick(View v) { 
     //?? hide listview fragment from here ?? 
    } 

} 

ListViewFragment.java

public class ListViewFragment1 extends Fragment { 

    protected ArrayAdapter<String> adapter1; 

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

     return inflater.inflate(R.layout.list_view_fragment, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

    } 

} 

Так мои Ques где я должен реализовать отображение/скрытие ListViewFragment? Мне кажется, что я должен отправить данные в MainActivity с помощью метода onClickButtonFragment. Но я не знаю, как это сделать.

Или я только добавляю код в MainActivity, так как MainActivity имеет доступ ко всем Fragments?

У меня возникли проблемы, потому что Button находится в Fragment, а не в MainActivity. Я действительно не видел таких случаев ...

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

+0

Вы, конечно, сделать много вопросов и замечаний в одном посте. Я хочу сделать эти пункты. Вы не отправляете данные в фрагмент, вы можете использовать метод findViewById (читайте об этом). Пользовательский интерфейс Button может находиться внутри фрагмента, главным образом потому, что объекты пользовательского интерфейса должны находиться в фрагменте. По мере того, как я пытаюсь, вам нужно будет устроиться с каркасом Android. Получайте удовольствие ... –

ответ

0

Если в фрагменте хотите сделать некоторые функции MainActivity, вы можете попробовать

  @Override 
     public void onClick(View v) { 
      //?? hide listview fragment from here ?? 
      ((MainActivity)getActivity()).hidelistView(); 
      //hidelistView you should imp in your MainActivity 
     } 
0

Если у вас есть фрагменты в тот же макет, вы можете использовать следующий код: http://www.java2s.com/Code/Android/Core-Class/Demonstrationofhidingandshowingfragments.htm

Если нет, чем вы можете использовать несколько возможностей ... Вы можете использовать намерение отправлять данные в MainActivity. У вас может быть экземпляр singleton, в котором вы храните указатель на свой MainActivity.

Вы также можете использовать Handler для отправки сообщений, но описанные выше способы проще реализовать и должны быть достаточными для вас.

0

Вы не можете напрямую показать/скрыть фрагмент. Вы можете показать/скрыть объект пользовательского интерфейса, например Listview. Если вы хотите, вы можете показать/скрыть Фрагмент косвенно с помощью FragmentTransaction, и вы можете позвонить по его методу, добавить, удалить или заменить. Ссылка для образца кода Fragments

1

ли это ..

android.app.Fragment fragment = getActivity().getFragmentManager().findFragmentByTag("YOUR_FRAGMENT_TAG"); 
     getActivity().getFragmentManager().beginTransaction().hide(fragment); 

внутри события щелчка!

Еще одна вещь, когда вы добавляете фрагменты, как это ..

transaction.add(R.id.button_fragment, buttonFrag, "Fragment1"); 
    transaction.add(R.id.listview_fragment, listviewFrag, "Fragment2"); 

вы должны предоставить идентификатор контейнера вместо идентификатора фрагмента.

Пример: Для MainActivity контейнера используйте R.id.containerMain

+0

этот код выглядит хорошо. Я попробую это скоро! Что касается идентификатора моего контейнера, как узнать, что такое идентификатор контейнера? [и что такое контейнер] – user2456977

+0

Вы можете установить id в любой макет контейнера (например: корневой макет в layout_main) в xml. Идентификатор контейнера фактически является идентификатором любой ViewGroup (например, макета), где вы хотите добавить свой фрагмент. @ user2456977 – Sjd

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