2012-03-01 129 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

相關問題