2012-03-01 126 views
7

基本上这是我的平板电脑横向应用(构思): 两个片段,左边的片段是由resource.xml文件填充的一个listfragment(工作正常)。以编程方式将片段添加到视图组

右段应根据用户点击的列表项动态更改片段和布局。谷歌搜索到目前为止告诉我,我需要编程添加和删除片段到一个视图组来做到这一点。是对的吗?

基本问题是/是:

  1. 如何创建一个ViewGroup和地方(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); 
    } 
} 

这是我listfragment 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”

我是个初学者。 Plaese告诉我在哪里需要放入你写下的代码?

谢谢,最大

+1

ViewGroup只是一个容器,就像LinearLayout或RelativeLayout。它应该被添加到活动布局文件(res/layout/activity.xml)。给你的ViewGroup一个id,然后你可以使用'findViewById'方法来引用它。 – twaddington 2012-03-01 05:22:46

回答

7

这些片段主题请看:

从本质上讲,你会希望有片段告诉父活动选择哪个项目。然后,该活动可以在窗格中添加/删除正确的片段右侧的窗格。

请记住,创建/销毁碎片对系统来说是很多工作。如果您可以在右侧窗格中使用单个片段,那么效率会更高。然后你可以调用那个片段实例上的方法而不用建立新的片段。

EDIT(例如):

主活动实现自定义方法:

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> 
+0

谢谢,只是后续: 1)我如何告诉onlistitemclick在我的listfragment更改右窗格视图加载另一个片段和布局? 2)我不需要销毁碎片,如果内存更容易,我可以将它们放在后台堆栈中。基本上我只想在右侧显示一个“DetailsFragment”,即用户在列表中点击的最后一个。 – Killerpixler 2012-03-01 14:24:51

+1

你的ListFragment有一个[getActivity] [1]方法。您可以在接受某个参数的主机Activity上编写公共方法,并在调用时更改右窗格。从你的左边Fragment的onListItemClick监听器中调用'getActivity'并将结果转换为父Activity类型。然后调用你的公共方法。像'updateDetailsPane(长ID)'应该工作。 'MyActivity activity =(MyActivity)getActivity();' [1]:http://developer.android.com/reference/android/app/Fragment.html#getActivity%28%29 – twaddington 2012-03-01 17:50:34

+0

我发布我的代码在编辑中,我逻辑上理解你说的是什么,但不知道如何以代码方式实现它。请帮助:S – Killerpixler 2012-03-01 22:37:29

相关问题