[英]How to communicate with fragment from my adapter class
我創建了一個自定義適配器類。 在那個類中,當我單擊我的列表視圖布局時,我有一個代碼必須向我的片段發送消息。 谷歌搜索后,最好的方法可能是使用界面。 它們中的大多數是在活動與片段之間進行通信的示例。 但就我而言,我對如何在適配器類與片段類之間進行通信沒有任何想法。 假設我在我的適配器類中創建了一個接口,例如:
public interface SuccessResponse{
void onSuccess();
}
在我的適配器類中的 LinearLayout 上,我希望它是這樣的:
linearLayout.setOnClickListener(new View.OnClickListener{
@Override
public void onClick (View view){
SuccessResponse.onSuccess();
}
})
然后我想確保我的片段頁面獲得 onSuccess() 方法並執行以下操作:
public class MyFragment extends ListFragment implements Adapter.SuccessResponse{
@Override
public void onSuccess(){
//do Something
}
}
有沒有辦法做類似上面的事情?
更新如果您正在尋找 Kotlin 中的解決方案
class ExampleFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val adapter = MyAdapter(){
Log.d("zzzz", "$it ")
}
}
}
class MyAdapter (val onClick : (value: String) -> Unit): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder.itemView.setOnClickListener {
onClick("something")
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
TODO("Not yet implemented")
}
override fun getItemCount(): Int {
TODO("Not yet implemented")
}
}
JAVA下面的代碼可能會對你有所幫助。
public class ExampleFragment extends Fragment implements MyAdapter.SuccessResponse{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.my_layout, container, false);
MyAdapter myAdapter = new MyAdapter(getActivity(), 0);
myAdapter.successResponse = this;
return contentView;
}
@Override
public void onSuccess() {
}
}
class MyAdapter extends ArrayAdapter{
SuccessResponse successResponse;
public MyAdapter(Context context, int resource) {
super(context, resource);
}
public interface SuccessResponse{
void onSuccess();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//ur views
linearLayout.setOnClickListener(new View.OnClickListener{
@Override
public void onClick (View view){
if(successResponse!=null)
successResponse.onSuccess();
}
})
}
}
在您的 CustomAdapter 中執行此操作
1) 導入片段
import android.support.v4.app.Fragment;
2) 在你的適配器中聲明片段對象
Fragment frag
public YourAdapter(Fragment frag) {
this.frag = frag;
}
3)現在調用你的片段方法
linearLayout.setOnClickListener(new View.OnClickListener{
@Override
public void onClick (View view){
((HomeFragment) frag).onSuccess();// here your fragment name HomeFragment
}
})
4) 在 HomeFragment 中
public void onSuccess(){
// do your stuff here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.