0

我創建了一個管理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延伸ListFragment {

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; 
} 

} ......

+0

我相信這不是最好的解決方案,但它的工作原理。我在包裝器中創建了一個函數來設置第二個onListItemClick監聽器,然後從子片段onCreate中調用該函數。它工作正常,但有可能是一個更乾淨的方式來做到這一點。 – user2741397

回答

0

我相信這不是最好的解決方案,但它的工作原理。我在包裝器中創建了一個函數來設置第二個onListItemClick監聽器,然後從子片段onCreate中調用該函數。它工作正常,但可能有更乾淨的方法來做到這一點。