2014-09-04 92 views
1

我在同一活動中有兩個靜態片段,在「fragmentA」中我有一個自定義列表,當單擊一個項目時必須在「fragmentB」中顯示一個細節,只有當我更改屏幕方向時纔會顯示細節, 。我在主要活動中使用此代碼進行刷新,但重新啓動應用程序(細節出現)。靜態片段

finish(); startActivity(getIntent());

有人知道在「fragmentB」中自動顯示細節的更好方法,當我點擊「fragmentA」中的某個項目時,始終在同一活動中使用兩個靜態片段。

+0

我建議你先用Android Studio創建一個新項目,當它要求你「添加一個活動」時,選擇「主/細節流」。這將生成一些示例代碼,它可以完成你想要做的事情。 – 2014-09-04 16:45:12

+0

感謝您的回答。 – 2014-09-04 16:49:13

回答

1

不要使用靜態引用來保存Fragment,這是一個非常糟糕的做法。 不要將上下文存儲在靜態引用中。 Or you could will leak memory

相反,實施Interface

// FragmentActivityTest

public class FragmentActivityTest extends FragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    FragmentB fragmentB = new FragmentB(); 
    FragmentA fragmentA = new FragmentA(); 
    fragmentA.setFragmentBHandler(fragmentB); 

    //Perform transactions etc 
} 
} 

// FragmentA

public class FragmentA extends Fragment { 

private FragmentBHandler _handler; 

public void setFragmentBHandler(FragmentBHandler handler) { 
    _handler = handler; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ((ListView) getView().findViewById(R.id.list_view)).setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      _handler.updateDetail(); 
     } 
    }); 
} 
} 

// FragmentB

public class FragmentB extends Fragment implements FragmentBHandler { 

@Override 
public void updateDetail() { 
    //do your work 
} 
} 
0

沒有顯示代碼,我只能猜測你當前的實現。

片段之間進行通信的適當的方法是

  1. 將數據傳遞給從片段A上項點擊父活動,
  2. 活性通過在片段管理器和呼叫查找片段將此數據傳遞到片段乙片段B中的方法
  3. 片段B中的該方法應確定是否應該填充細節。
1

你應該使用類似greenrobototto的活動巴士。 FragmentB訂閱事件,FragmentA發佈該事件。當您點擊一個項目時,您會發送一個事件,並且訂閱者將執行您的操作(顯示詳細信息)。