2016-07-30 73 views
0

適配器類,它提供一個接口:接口適配器接口片段機器人

public class Adaptor{ 

    private ItemCLickCallback itemCLickCallback; 

     public interface ItemCLickCallback { 
      void onItemClick(int p); 
      void onSecItemClick(int p); 
     } 
     public void setItemCLickCallback(final ItemCLickCallback itemCLickCallback){ 
      this.itemCLickCallback = itemCLickCallback; 
     }} 


public class Overview extends Fragment implements Adaptor.ItemCLickCallback{ 

     @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_overview, container, false); 
     Adaptor adaptor = new Adaptor(mijnwinkels, this.getActivity()); 
adaptor.setItemCLickCallback(this); 
     return view; 
    } 

@Override 
    public void onItemClick(int p) { 
} 
    @Override 
    public void onSecItemClick(int p) { 
     // On click: send data to database, remove data from database 
     // Needs methods that should be implemented in my activity, cant be linked to the activity 
    }} 

大二我的片段中覆蓋的方法需要應該位於我的活動中的方法,這些方法需要片段中的數據。通常我會使用一個接口來做到這一點,但這些方法已經是另一個類的接口的一部分,所以我怎樣才能把它們放在一個接口中,以便我可以從我的活動中做所有事情?謝謝你,而不是

+0

創建該包所有的代碼稱爲可提取到接受溫克爾對象 –

+0

不管怎麼說,什麼'onSuccess'的方法?請出示[mcve] –

+0

@ cricket_007增加一些註釋以進一步解釋。我的片段目前正在實現從我的適配器接口,但我想基本上在我的活動中創建一個新的接口。 OnSecItemCLick()將獲取和設置數據到我的數據庫的代碼,但因爲我需要在其他地方使用該代碼(在同一活動中),我希望它在活動中,我不知道該怎麼做因爲這些方法是我的適配器中的接口的一部分,在我的片段中實現 – user3117628

回答

1

你的問題似乎主要是從界面移除重複的代碼打交道,所以這裏的一些建議。

當您在onSuccess中獲取數據時,不需要添加全新的適配器。

private ArrayList<Winkel> mijnwinkels; 
private Adaptor mAdaptor; 

onCreateView() { 
    //... Other code 
    mijnwinkels = new ArrayList<Winkel>(); 
    // mRecyclerView =... 
    mAdaptor = new Adaptor(mijnwinkels, this.getActivity()); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); 
    mRecyclerView.addItemDecoration(new VerticalSpace(30)); 
    mRecyclerView.setAdapter(adaptor); 
    adaptor.setItemCLickCallback(this); 
    // etc... 
} 

@Override 
public void onSuccess(ArrayList<Winkel> winkels) { 
    mijnwinkels.clear(); 
    mijnwinkels.addAll(winkels); 
    mAdaptor.notifyDatasetChanged(); // something like this... Not sure how RecyclerView does it 
} 

如果您Winkel implements Parcelable並實施必要的代碼,你刪除一些行那裏。

@Override 
public void onItemClick(int p) { 
    Winkel winkel = (Winkel) mijnwinkels.get(p); 

    Bundle detailsBundle = new Bundle(); 
    detailsBundle.putExtra(EXTRA_WINKEL,winkel); 

    Details detail= new Details(); 
    detail.setArguments(detailsBundle); 
    this.getFragmentManager().beginTransaction() 
      .replace(R.id.mycontainer,detail,null) 
      .addToBackStack(null) 
      .commit(); 
    } 

雖然,真的,所有這些都可以寫成它自己的方法。

public static void showWinkel(Winkel winkel, FragmentManager fm) { 
    Bundle detailsBundle = new Bundle(); 
    detailsBundle.putExtra(EXTRA_WINKEL,winkel); 

    Details detail= new Details(); 
    detail.setArguments(detailsBundle); 
    fm.beginTransaction() 
     .replace(R.id.mycontainer,detail) 
     .addToBackStack(null) 
     .commit(); 
} 

從任何地方

@Override 
public void onItemClick(int p) { 
    showWinkel(mijnwinkels.get(p), this.getFragmentManager()); 
} 
0

adaptor.setItemCLickCallback(this); 

一旦使用下面的代碼爲您的片段:

adaptor.setItemCLickCallback(new Adaptor.ItemCLickCallback() { 
       @Override 
       public void onItemClick(int position) { 

    } 

}); 
+0

編輯我的代碼,對不起,它不夠清楚。我的方法工作得很好,我想避免重複的代碼(仍然需要寫入),但我不知道在這種情況下如何去做 – user3117628