2013-02-04 34 views
-4

我正在首次實現碎片,所以請幫助我。實現碎片Androids

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <fragment android:name="com.example.news.ArticleListFragment" 
      android:id="@+id/list" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 
    <fragment android:name="com.example.news.ArticleReaderFragment" 
      android:id="@+id/viewer" 
      android:layout_weight="2" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 
</LinearLayout> 

我想具有ID爲「清單」該片段應保持不變,但具有片段ID「觀衆」應該能夠調用不同的類。

(請注意,類擴展活動。)

我的問題很簡單:我有四個班(擴展活動)。我想將屏幕分成兩部分。左側保持不變,其中包含列表視圖。在列表視圖的點擊中,我想打開我的類(擴展活動),但只在右側部分(剩餘的屏幕)。

+0

爲什麼這樣投下來? –

+0

正如你在常見問題上看到的,你的問題基本上是一個「特定的編程問題」,這不是這種情況。你並沒有問任何可以輕易指出的問題,而是一個對我而言的問題。 – Rigotti

+0

我查看了很多相關的例子,但所有的「單個活動中都有多個片段」,但我試圖在一個片段中獲得「多個活動」。 –

回答

0

根據android的碎片文檔: 碎片表示活動中的行爲或用戶界面的一部分。您可以在單個活動中組合多個片段來構建多窗格用戶界面,並在多個活動中重用片段。您可以將片段看作活動的模塊化部分,該活動有其自己的生命週期,接收自己的輸入事件以及可以在活動運行時添加或刪除的活動(有點像可以使用的「子活動」在不同的活動中重用)。

http://developer.android.com/guide/components/fragments.html

我從你的問題理解的是,要將fragement viewer的在運行時的內容。我可以建議的一個可能的解決方案是: 而不是你的四個類延伸Activity,延長Fragment,每個都有自己的佈局。修改主要佈局文件看起來像這樣:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<fragment android:name="com.example.news.ArticleListFragment" 
     android:id="@+id/list" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" /> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/viewer" 
     android:layout_weight="2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" > 
</FrameLayout> 

</LinearLayout> 

的FrameLayout裏基本上會充當你的片段,您可以在運行時動態加載的容器(點擊ListView控件)。本教程將幫助你呢:

http://developer.android.com/training/basics/fragments/fragment-ui.html

希望我的回答可以幫助你以某種方式。

+0

框架佈局將作爲片段的容器,而不是活動。我希望框架佈局你指定的行爲作爲Activity的容器 –

+0

看你錯過了片段的目的片段是android提供的機制,如果你想避免使用意圖和單獨的活動,片段允許你模塊化你的活動,你不能添加活動中的另一個活動片段就是出於這個目的,它們可以嵌入到活動中,並且可以像活動一樣發送和接收數據。您不能在與另一活動相同的屏幕上啓動活動。自動帶您到下一個屏幕,但片段提供您需要的功能 –

+0

也試圖解釋d活動可以由多個片段組成,而不是相反。 –

1

這是一個基本問題。你應該從here開始。而this topic也可以幫助你。

+0

這裏的例子是類特定的,即我們在xml本身指定一個類。我想使用不同的類(每個類是一個活動類),這是點擊左邊片段上的列表項的結果。 –

+0

感謝您在回答我的問題時表達您的關注。請幫忙。 –

+0

你不能一次顯示兩個活動。您應該實施片段以顯示您的內容並將其放入一項活動中。片段之間的通信可以通過容器活動完成 – Style

1

片段就像分離的活動,所以除非你做出更改,否則一個片段上的動作不會影響其他片段。 假設你在左邊的片段上有一個listview,在它的活動中放置一個onItemClickListener。 對於每個itemclick切換右側片段上的活動。對於OnItemClick事件

Fragment fragment=new activity1(); 
fragmentManager fm=getFragmentManager(); 
FragmentTransaction ft=fm.beginTransaction(); 
ft.replace(R.id.frame2,fragment); 
ft.commit(); 

在上面的代碼段活性1

示例代碼是新的類要附加到合適的片段。 R.id.frame2是與右邊的片段一起使用的framelayout的id。

+0

@sneaker_android你使用的一些代碼將有助於更好地指導你。 – Deepak

+0

但根據你的代碼activity1應該擴展片段,但我的activity1擴展了Activity。 :(....... –

+0

@sneaker_android任何具體的原因,你想這樣做.. – Deepak

0

片段類可以用許多方法來實現各種各樣的結果。在它的核心中,它表示在一個更大的活動中運行的特定操作或接口。片段與它所處的活動密切相關,不能單獨使用。儘管Fragment定義了自己的生命週期,但生命週期依賴於它的活動:如果活動停止,它內部的任何片段都不能啓動;當活動被破壞時,所有碎片都將被銷燬。

MyFragment newFragment = new MyFragment();// MyFragment is a Fragment class 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

     transaction.add(R.id.fra,newFragment, tag); 
     transaction.addToBackStack(null); 

     transaction.commit(); 

sample code

在示例代碼變化

  ft.add(android.R.id.content,fragTwo, "tag"); 

  ft.add(R.id.fra,fragTwo, "tag"); 

和detail.java

    public void onStart() { 
    // TODO Auto-generated method stub 
    tv.setText(data); 
    b.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      FragmentManager fm = getFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 
      fm.beginTransaction(); 
      Fragment fragTwo = new MyFragment(); 
      //String tag = getActivity().GetFragmentID(); 
      Fragment f= fm.findFragmentById(getId()); 
      ft.replace(R.id.fra,fragTwo, "tag"); 
      ft.hide(f); 
      ft.commit(); 


     } 
    }); 


    super.onStart(); 
} 
添加一些代碼