我创建了一个自定义适配器类。在该类中,当我单击 ListView 布局时,我有一个代码必须向 fragment 发送消息。
谷歌搜索后,最好的方法是使用接口(interface)。其中大多数是在 Activity 与 fragment 之间进行通信的示例。但就我而言,我对适配器类和 fragment 类之间的通信方式一无所知。
假设我在适配器类中创建一个接口(interface),例如:

public interface SuccessResponse{
    void onSuccess();
}

并在我的适配器类中的LinearLayout上,我希望它类似于:
linearLayout.setOnClickListener(new View.OnClickListener{
    @Override
    public void onClick (View view){
        SuccessResponse.onSuccess();
    }
})

然后,我要确保我的 fragment 页面获得onSuccess()方法并执行以下操作:
public class MyFragment extends ListFragment implements Adapter.SuccessResponse{
    @Override
    public void onSuccess(){
        //do Something
    }
}

有什么办法做上面的事情吗?

最佳答案

更新
如果您正在寻找Kotlin的解决方案

class ExampleFragment : Fragment(), SuccessResponse {
    val adapter = MyAdapter()
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        adapter.successResponse = this
    }

    override fun onSuccess() {
        //DO what you want to do
    }
}


class MyAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    var successResponse: SuccessResponse? = null
    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        holder.itemView.setOnClickListener {
            successResponse?.onSuccess()
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        TODO("Not yet implemented")
    }

    override fun getItemCount(): Int {
        TODO("Not yet implemented")
    }
}

interface SuccessResponse {
    fun onSuccess()
}
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() {

    }
}


MyAdapter类扩展ArrayAdapter {
SuccessResponse成功响应;

public MyAdapter(Context context,int resource){
super (上下文,资源);
}

公共(public)接口(interface)SuccessResponse {
无效的onSuccess();
}

@Override
public View getView(int position,View convertView,ViewGroup parent){
//您的意见
linearLayout.setOnClickListener(new View.OnClickListener {
@Override
无效的onClick(查看 View ){
if(successResponse!= null)
successResponse.onSuccess();
}
})
}
}

10-06 06:37