如何与我的适配器类中的片段进行通信

时间:2017-03-02 04:10:20

标签: java android android-fragments

我创建了一个自定义适配器类。在那个类中,我有一个代码,当我点击我的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
    }
}

有没有办法做上面的事情?

2 个答案:

答案 0 :(得分:9)

以下代码可能会对您有所帮助。

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();
            }
        })
    }
}

答案 1 :(得分:1)

在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
    }