8

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

右片段应该根据用户单击的列表项动态更改片段和布局。到目前为止,谷歌搜索告诉我,我需要以编程方式向视图组添加和删除片段才能做到这一点。那正确吗?

基本上问题是/是:

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

编辑:

所以这就是我的活动的样子: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”

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

4

1 回答 1

7

看看这些片段主题:

本质上,您希望让左侧片段告诉父 Activity 选择了哪个项目。然后,Activity 可以在右窗格中添加/删除正确的片段。

请记住,创建/销毁 Fragment 对系统来说是很多工作。如果您可以在右窗格中使用单个 Fragment,它将更加有效。然后,您可以在该 Fragment 实例上调用方法,而无需构建新的 Fragment。

编辑(示例):

您使用自定义方法的主要活动实现:

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

onListItemClick实现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>
于 2012-03-01T05:19:39.387 回答