我在同一活動中有兩個靜態片段,在「fragmentA」中我有一個自定義列表,當單擊一個項目時必須在「fragmentB」中顯示一個細節,只有當我更改屏幕方向時纔會顯示細節, 。我在主要活動中使用此代碼進行刷新,但重新啓動應用程序(細節出現)。靜態片段
finish(); startActivity(getIntent());
有人知道在「fragmentB」中自動顯示細節的更好方法,當我點擊「fragmentA」中的某個項目時,始終在同一活動中使用兩個靜態片段。
我在同一活動中有兩個靜態片段,在「fragmentA」中我有一個自定義列表,當單擊一個項目時必須在「fragmentB」中顯示一個細節,只有當我更改屏幕方向時纔會顯示細節, 。我在主要活動中使用此代碼進行刷新,但重新啓動應用程序(細節出現)。靜態片段
finish(); startActivity(getIntent());
有人知道在「fragmentB」中自動顯示細節的更好方法,當我點擊「fragmentA」中的某個項目時,始終在同一活動中使用兩個靜態片段。
不要使用靜態引用來保存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
}
}
沒有顯示代碼,我只能猜測你當前的實現。
片段之間進行通信的適當的方法是
你應該使用類似greenrobot或otto的活動巴士。 FragmentB
訂閱事件,FragmentA
發佈該事件。當您點擊一個項目時,您會發送一個事件,並且訂閱者將執行您的操作(顯示詳細信息)。
我建議你先用Android Studio創建一個新項目,當它要求你「添加一個活動」時,選擇「主/細節流」。這將生成一些示例代碼,它可以完成你想要做的事情。 – 2014-09-04 16:45:12
感謝您的回答。 – 2014-09-04 16:49:13