我创建了一个自定义适配器类。在该类中,当我单击 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();
}
})
}
}