2016-08-26 28 views
0

我需要在適配器中爲checkbox clickListener創建一個接口,以便我可以在一個片段中實現它。在適配器的活動中爲複選框的onClick實現監聽器

下面的代碼是在myadapter,我需要移動邏輯clickListener內部在使用適配器

holder.ivLike.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (!isLike) { 
      like(postsData.getNews_id()); 
      realmResults.get(position).setChecked(true); 
      holder.tvNewsCountLike.setText("" + (Integer.parseInt(holder.tvNewsCountLike.getText().toString()) + 1)); 
      holder.ivLike.setChecked(true); 
      isLike = true; 
     } else { 
      unlike(postsData.getNews_id()); 
      holder.tvNewsCountLike.setText("" + (Integer.parseInt(holder.tvNewsCountLike.getText().toString()) - 1)); 
      holder.ivLike.setChecked(false); 
      isLike = false; 

     } 

    } 
}); 
+2

使用一個接口來做到這一點 –

+0

我不如何​​做到這一點,你可以幫忙請 – SimpiMind

+0

'EventBus'是另一種選擇這可能更容易實現 – PPartisan

回答

2

您可以在此處使用界面回調。

例:

public class MyAdapter { 
private MyListener mListener; 


public void setListener(MyListener listener){ 
    mListene r= listener; 
} 


//where ever you want to call back 
if(mListener != null){ 
    mListener.onNotify(); 
} 

public interface MyListener{ 
void onNotify(); 
} 

} 

活動/ Fargment

public class MyActivity extends Activity implements MyAdapter.MyListener{ 

    myAdapter.setListener(this); 

    @Override 
    public void onNotify(){ 
     //do your logic here 
    } 
} 
+0

謝謝,這爲我工作,但滾動複選框自動取消選擇,我該如何處理。 – SimpiMind

+0

你必須在你的模型類上有一個布爾值,它可以保存你的複選框的狀態。 – droidev

2

在適配器中的片段,宣佈這樣的事情作爲你的Listener接口:

現在
public class FooAdapter extends RecyclerView.Adapter<ViewHolder> { 

    public interface Listener { 
     void onItemClicked(); // Customize to your needs 
    } 

    private final List<Listener> listeners = new ArrayList<>(); 

    public void addListener(Listener l) { 
     listeners.add(l); 
    } 

    // In your viewholder: 
    holder.ivLike.setOnClickListener(new View.OnClickListener() { 
     @Override public void onClick(View v) { 
      for(Listener l : listeners) l.onItemClicked(); 
     } 
    }); 
} 

,在你的片段,實現監聽,並聽取了適配器:

public class FooFragment extends Fragment implements FooAdapter.Listener { 

    // In onCreate() 
     ... 
     FooAdapter adapter = new FooAdapter(); 
     adapter.addListener(this); 
     ... 

    @Override public void onItemClicked() { 
     // Add your logic here. 
    } 
}