2016-07-30 50 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