4 개의 탭을 관리하는 Tab FragmentActivity 클래스를 만들었습니다.상위 래퍼 조각 두 개의 OnItemClick 이벤트 처리
탭 하나에 대한 부모의 역할을하는 랩퍼 단편을 포함
1) (표시 카테고리)를 ListFragment - 목록의 항목을 클릭하면 항목의 하위 목록이 표시된다 (# 2 아래) 래퍼 프래그먼트 list.setOnItemClickListener (신규 OnItemClickListener()를 호출하고 사용하여 동일한 탭 :. 표시 번째
getChildFragmentManager()
.beginTransaction()
.replace(R.id.container, details)
.addToBackStack(null)
.commit();
클릭하는 제 목록 및 갖는 문제는 두 번째 목록에 큰 클릭을 작동되지 세부 사항을 표시하려면 ... 내가 문제가있는 곳입니다.
2) 목록 조각 (하위 목록 표시) - 두 번째 setOnItemClickListener를이 하위 목록의 클릭을 수신 대기하도록 래퍼에 구현하려고합니다. 나는 이것을 구현하는 방법을 이해할 수 없다.
3)의 조각 (상기 (2)에서 선택된 항목의 상세)
public class CategoryListWrapperFragment extends Fragment {
public static final String EXTRA_ITEM_ID_STRING = "com.f.lite.item_selected_from_list_id";
private String mPassId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DealListFragment deallist = new DealListFragment();
deallist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
Log.d("Wrapper", "Inside deallist on click listner");
Bundle args = new Bundle();
args.putString(EXTRA_ITEM_ID_STRING, mPassId);
// Create details fragment based on clicked item's position
DealFragment details = new DealFragment();
details.setArguments(args);
getChildFragmentManager()
.beginTransaction()
.replace(R.id.container, details)
.addToBackStack(null)
.commit();
}
});
CategoryListFragment list = new CategoryListFragment();
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
Bundle args = new Bundle();
args.putString(EXTRA_ITEM_ID_STRING, mPassId);
DListFragment sublist = new DListFragment();
sublist.setArguments(args);
getChildFragmentManager()
.beginTransaction()
.replace(R.id.container, sublist)
.addToBackStack(null)
.commit();
}
});
getChildFragmentManager()
.beginTransaction()
.add(R.id.container, list)
.commit();
}
public void setPassId(String passIn) {
mPassId = passIn;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// There has to be a view with id `container` inside `wrapper.xml`
return inflater.inflate(R.layout.wrapper, container, false);
}
}
enter code here
public class CategoryListFragment extends ListFragment {
private OnItemClickListener listener;
private ArrayList<Category> mCategory;
ImageView mCategoryImageView;
@Override
public void onAttach (Activity activity) {
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.category_title);
mCategory = CategoryLab.get(getActivity()).getCategory();
CategoryAdapter adapter = new CategoryAdapter(mCategory);
setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Category c = ((CategoryAdapter)getListAdapter()).getItem(position);
CategoryListWrapperFragment parent = (CategoryListWrapperFragment)getParentFragment();
parent.setPassId(c.getmCategory());
if(listener != null) {
listener.onItemClick(l, v, position, id);
}
}
public void setOnItemClickListener(OnItemClickListener l) {
this.listener = l;
}
....
공용 클래스 DListFragment는 {
private ArrayList<Deal> mDeals;
private OnItemClickListener listener;
private String mCategoryID;
@Override
public void onAttach (Activity activity) {
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCategoryID = (String)getArguments().getString(CategoryListWrapperFragment.EXTRA_ITEM_ID_STRING);
mDeals = DealLab.get(getActivity()).getDeals(mCategoryID);
getActivity().setTitle(mCategoryID);
DealAdapter adapter = new DealAdapter(mDeals);
setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Deal d = ((DealAdapter)getListAdapter()).getItem(position);
CategoryListWrapperFragment parent = (CategoryListWrapperFragment)getParentFragment();
parent.setPassId(Long.toString(d.getmId()));
if(listener != null) {
listener.onItemClick(l, v, position, id);
}
}
@Override
public void onResume() {
super.onResume();
mDeals = DealLab.get(getActivity()).getDeals(mCategoryID);
DealAdapter adapter = new DealAdapter(mDeals);
setListAdapter(adapter);
}
public void setOnItemClickListener(OnItemClickListener l) {
this.listener = l;
}
ListFragment 확장 표시 } ......
이것이 최선의 해결책은 아니지만 효과가 있다고 확신합니다. 두 번째 onListItemClick 리스너를 설정 한 다음 자식 조각 onCreate에서 해당 함수를 호출하는 래퍼에 함수를 만들었습니다. 그것은 잘 작동하지만 이것을 할 수있는 더 깨끗한 방법이있을 것입니다. – user2741397