2017-08-15 58 views
0

我在我的應用程序中使用recyclerview。我想在點擊圖片視圖時啓動一個片段。但我不知道如何。另外我想把數據,當開始片段。我知道如何用下面的代碼開始活動。但我怎樣才能以相同的方式開始片段?如何從onClick開始片段

編輯代碼

FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.layoutContent, frag); 
    ft.commit(); 
+0

我已經編輯我的代碼。但正如在那裏提到的,我不會嘗試從另一個活動中替換片段。 – Ch4t4r

回答

0

片段不能啓動,必須​​將它們添加到容器中。
片段並不是要獨立運作,他們需要一個封閉的活動。

具有以下佈局:

[...] 
    <FrameLayout android:id="@+id/container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="?android:attr/detailsElementBackground" /> 
    [...] 

您將片段像這樣:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.replace(R.id.container, newFragment); 
transaction.commit(); 

您可以通過使用捆綁並創建片段參數傳遞給片段如下:

TestFragment newFragment = new TestFragment(); 
Bundle args = new Bundle(); 
args.putString("Hello world!"); 
newFragment.setArguments(args); 

這必須在交易之前完成。

如需進一步信息請參考上編輯代碼official documentation



注意:您必須從活動中的FrameLayout是一部分內部調用事務。
或者使用比較髒的解決方法: 在主營:

public class Main extends Activity{ 
    public static Main currentInstance; 

    public void onCreate(Bundle boomerang){ 
    currentInstance = this; 
    } 
} 

播放列表中的活動,然後使用Main.currentInstance.getSupportFragmentManager()
但我不會推薦它。

+0

好的,我還有一個問題。我想從播放列表中啓動一個片段,但該片段位於主要活動中。如果我使用FragmentTransaction,它會給出錯誤信息「沒有找到用於片段ID的視圖」 –

+0

請問您可以在您的問題中發佈當前代碼嗎?你的Fragment是否在'public static class NameOfFragment'中? – Ch4t4r

+0

我已經更新了代碼,錯誤是由於主要佈局中的layoutContent。我試圖從playlistdetails活動中改變它。 –

0

爲了啓動一個片段,你需要使用片段管理器。

YourFragment yourFragmentInstance = YourFragment.newInstance("Hello", 12); 
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
//Fragment is hosted by an activity, and the activity must have a layout 
//or a container for the fragment to be nested in, in this case it will be 
//a FrameLayout with an id fragment_container 
fragmentTransaction.replace(R.id.fragment_container, yourFragmentInstance); 
fragmentTransaction.commit(); 

而且你可以在參數傳遞給您的片段是這樣的:

public class YourFragment extends Fragment { 

    public static YourFragment newInstance(String paramOne, int paramTwo) { 
     YourFragment fragment = new YourFragment(); 
     Bundle b = new Bundle(); 
     //set params/arguments for fragment 
     b.putString("param_one", paramOne); 
     b.putInt("param_two", paramTwo); 
     fragment.setArguments(b); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //Get the params you passed in 
     Bundle bundle = getArguments(); 
     String paramOne = bundle.getString("param_one"); 
     String paramTwo = bundle.getInt("param_two"); 
    } 
} 

注:我沒有測試此代碼。這只是一個想法:)