我已经创建了一个自定义适配器类。在这个类中,当我单击listview布局时,我有一个代码必须向我的片段发送一条消息。在谷歌搜索之后,最好的方法可能是使用界面。其中大多数都是在活动与片段之间进行通信的例子。但在我的例子中,我对如何在适配器类和片段类之间进行通信没有任何想法。让我说我在适配器类中创建了一个接口,如下所示:
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
}
}有办法做上面这样的事吗?
发布于 2017-03-02 04:22:31
如果您正在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")
}
}下面的代码可能对您有所帮助。
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();
}
})
}
}发布于 2017-03-02 04:20:10
在你的CustomAdapter中做它
1)进口片段
import android.support.v4.app.Fragment; 2)在适配器中声明frag对象
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
}https://stackoverflow.com/questions/42546709
复制相似问题