2017-08-16 154 views
-2

我想從B活動中啓動一個片段,但該片段位於主活動中。如果我使用FragmentTransaction,但它給錯誤 「無視聽找到ID爲片段」如何從另一個活動中啓動一個片段

代碼

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

錯誤

沒有查看發現ID 0x7f0e00be(com.company.app: ID/layoutContent)的片段PlaylistFrag {5764566#0 ID = 0x7f0e00be}

+0

使用inteface或本地廣播,並在其回調 –

+0

標識0x7f0e00be替代片段是layoutContent –

+0

https://stackoverflow.com/questions/16761812/change-viewpager-fragment-by-a-buttonclick/16770088#16770088 – RRTW

回答

-1

添加該代碼在你的onClick

// Create new fragment and transaction 
Fragment newFragment = new ExampleFragment(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

// Replace whatever is in the fragment_container view with this fragment, 
// and add the transaction to the back stack 
transaction.replace(R.id.fragment_container, newFragment); 
transaction.addToBackStack(null); 

// Commit the transaction 
transaction.commit(); 

,並添加onBackPressed()

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0) { 
     getFragmentManager().popBackStack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
-1

進行佈局象下面這樣MainActivity.java和其佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_add_workout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.nujster.activity.AddWorkoutActivity"> 

    <LinearLayout 
     android:id="@+id/add_workout_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"/> 

</RelativeLayout> 

然後,在下面的代碼主要活動寫調用片段

public class AddWorkoutActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_workout); 

      getSupportFragmentManager().beginTransaction().add(R.id.add_workout_fragment, new LevelFragment(), "levels").addToBackStack(null).commit(); 
    } 

    @Override 
    public void onBackPressed() { 
     if (getSupportFragmentManager().findFragmentByTag("levels") != null) { 
      LevelFragment levelFragment = (LevelFragment) getSupportFragmentManager().findFragmentByTag("levels"); 
      if (levelFragment.isVisible()){ 
       finish(); 
      } else{ 
       getSupportFragmentManager().popBackStack(); 
      } 
     } 
    } 
} 
+0

@Ganesh Sumb你確切的問題是什麼我沒有得到它,請詳細說明。 –

-1

你可以loa d不同活動中的相同片段。

通常在Activity容器中加載片段。

活動-1的佈局都容器說R.id.layoutContent 活動-2的佈局也應該有一個容器R.id.xxx

ft.replace(R.id.layoutContent[Container where fragment loads], frag); 

可以進行活性-2沒有容器的id

+0

活動2沒有容器標識。它不是「可能」它不是 – Zoe

0

,這將觸發一個例外,因爲getSupportFragmentManager()是與你進行這項工作,所以當你使用ft.replace(R.id.layoutContent, frag);將尋找layoutContent上的當前活動,並不會發現

我不豪的活動功能吳想

解決方案==> - 使用事件總線或Rxjava :)或者可以使用接口setter和getter,並檢查它在另一活動或使用靜態變量來檢查要更換的片段:)

0

如果我理解你的問題,你想在另一個活動的Activity中啓動一個片段。 這就是我爲了解決這個問題而做的。

  1. 從目前的活動,我就會開始其他活動上點擊

    Intent intent = new Intent (ActivityA.this, ActivityB.class); 
    intent.putExtra("EXTRA", "openFragment"); 
    startActivity(intent); 
    
  2. 在目標活動,傾聽羣衆演員的意圖,並開始採取行動。

    switch (getIntent().getStringExtra("EXTRA")){ 
        case "openFragment": 
         getSupportFragmentManager().beginTransaction().replace(R.id.replacableLayout, new FragmentActivityB()).commit(); 
         getSupportActionBar().setTitle("Fragment Activity B"); 
         break; 
    } 
    

它爲我的作品...

相關問題