Программно добавлять фрагменты в группу просмотра - PullRequest
7 голосов
/ 01 марта 2012

В основном это мое приложение (идея) для альбомной ориентации планшета: Два фрагмента, левый фрагмент - это фрагмент списка, заполненный файлом resource.xml (это работает).

Правый фрагмент должен динамически изменять фрагмент и макет в зависимости от того, какой элемент списка пользователь щелкает. До сих пор поиск в Google сказал мне, что для этого мне нужно программно добавлять и удалять фрагменты в группе просмотра. Это верно?

В основном вопрос:

  1. Как создать группу просмотра и где (Main.java или menufragment.java)?
  2. Как поместить динамический «идентификатор пользователя, по которому щелкнул 3, в список, поэтому добавьте фрагмент 3 в группу просмотра»
  3. Что мне добавить в мой файл main.xml? там есть фрагмент для фрагмента списка, что добавить для динамической группы просмотра?

EDIT:

Так вот как выглядит моя деятельность: Main.java

public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    }
}

Это мой список фрагментов MenuFragment.java

public class MenuFragment extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.listfragment, container, false);

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

    setListAdapter(new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1,
            getResources().getStringArray(R.array.listmenu)));
    }    



    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Main activity = (Main) getActivity();
    }


}

и, наконец, мой main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<fragment
    android:id="@+id/list"
    android:layout_width="200dp"
    android:layout_height="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_weight="1"
    class="com.mwerner.fragmentstest.MainMenu" />

<View
    android:id="@+id/contentview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/list" />

</RelativeLayout>

Массив строк в моем xml-файле, который заполняет список, называется listmenu

Скажите, пожалуйста, куда мне нужно вписать код, который вы записали?

1 Ответ

7 голосов
/ 01 марта 2012

Взгляните на следующие темы фрагмента:

По сути, вам нужно, чтобы фрагмент left сообщал родительскому Activity, какой элемент выбран.Затем Activity может добавить / удалить правильный фрагмент на панели right .

Имейте в виду, что создание / уничтожение фрагмента - большая работа для системы.Если вам удастся избежать использования одного фрагмента на правой панели, это будет намного эффективнее.Затем вы можете вызывать методы для этого одного экземпляра фрагмента, не создавая новые фрагменты.

РЕДАКТИРОВАТЬ (пример):

Ваша основная реализация деятельности с пользовательским методом:

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    /** Called by the left fragment */
    public void updateRightPane(long id) {
        // Get the data with the selected item id
        // ...

        // Create a new fragment
        MyFragment fragment = new MyFragment(data);

        // Update the layout
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        // The id specified here identifies which ViewGroup to
        // append the Fragment to.
        ft.add(R.id.view_group_id, fragment);
        ft.commit();
    }
}

1026 * реализация для MenuFragment.java:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    // Get the parent Activity
    Main activity = (Main) getActivity();

    // Pass the selected item id to the Activity method
    // Note: Feel free to update this method to accept additional
    //       arguments (e.g. position).
    activity.updateRightPane(id);
}

Наконец, ваш файл макета:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view_group_id"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <!-- More views here... -->

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