android - 以编程方式将 fragment 添加到 View 组

标签 android android-fragments viewgroup

基本上这是我的平板横向应用程序(想法): 两个 fragment ,左侧 fragment 是一个由 resource.xml 文件填充的列表 fragment (可以正常工作)。

Right fragment 应该根据用户单击的列表项动态更改 fragment 和布局。谷歌搜索到目前为止告诉我,我需要以编程方式向 View 组添加和删除 fragment 来执行此操作。是吗?

基本上问题是:

  1. 如何创建 View 组以及在哪里(Main.java 或 menufragment.java)?
  2. 如何将动态“用户点击 ID 3 添加到列表中,以便将 fragment 3 添加到 View 组”
  3. 我要在我的 main.xml 文件中添加什么?那里有 listfragment 的 fragment ,要为动态 View 组添加什么?

编辑:

这就是我的 Activity 的样子: 主.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);
    }
}

这是我的列表 fragment 菜单 fragment .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”

请告诉我需要将您写下的代码放在哪里?

最佳答案

看看这些 Fragment 主题:

本质上,您需要让 left fragment 告诉父 Activity 选择了哪个项目。然后, Activity 可以在 Pane 中添加/删除正确的 fragment 。

请记住,创建/销毁 fragment 对系统来说是一项繁重的工作。如果您可以在右侧 Pane 中放置一个 Fragment,效率会高得多。然后,您可以在该 Fragment 实例上调用方法,而无需构建新的 Fragment。

编辑(示例):

您使用自定义方法的主 Activity 实现:

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();
    }
}

MenuFragment.javaonListItemClick 实现:

@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>

关于android - 以编程方式将 fragment 添加到 View 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9510494/

相关文章:

android - 当应用程序崩溃并且 logcat 没有显示错误时该怎么办

android - 尝试通过 TCP 通过 adb 连接到 Android 设备时显示 “error: closed”

android - 在 app.js 中加载插件引用 : NativeScript

android - apk (.apk) 和应用程序包 (.aab) 之间的区别

android - FragmentContainerView 使用 findNavController

android - 如何从抽屉导航中打开一个新 fragment ?

android - 在实例化时将对象传递给 Fragment 或 DialogFragment

Android,如何为 View 组设置动画监听器?

android - 自定义相对布局缩放?

android - 使用 addView() 时我的应用程序崩溃