android的接口回调

什么是接口回调呢,就是当你在B页面写好的数据,但A或C想调用的时候,直接通过B写的接口可以把数据调过来A,C这里进行相关其他的操作。而且B写的接口,A和C并不一定就会调用,只是当需要用到B里面的数据才会调用此接口,所以并不影响A,C页面本身的业务逻辑操作。

下面我敲了Recyclerview的条目监听的一个接口回调把数据从Adapter中把点击哪一条条目和position转到主页面中进行其他的操作。

public class RvAdapter extends RecyclerView.Adapter implements View.OnClickListener {
    private final Context context;
    private onItemClickListener mOnItemClickListener;

    public RvAdapter(Context context) {
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.item_view, parent, false);
        ViewHolder viewHolder = new ViewHolder(inflate);
        inflate.setOnClickListener(this);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ViewHolder viewHolder = (ViewHolder) holder;
        viewHolder.itemView.setTag(position);
        viewHolder.setData(position);
    }

    @Override
    public int getItemCount() {
        return 10;
    }

    @Override
    public void onClick(View v) {
        if (mOnItemClickListener != null) {
            mOnItemClickListener.onItemClick(v, (Integer) v.getTag());
        }
    }

    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView mTextView;
        ImageButton mImageButton01;
        TextView mTextNumber;
        ImageButton mImageButton02;
        int number = 0;

        public ViewHolder(View itemView) {
            super(itemView);
            mTextView = itemView.findViewById(R.id.tv);
            mImageButton01 = itemView.findViewById(R.id.ib_01);
            mTextNumber = itemView.findViewById(R.id.tv_01);
            mImageButton02 = itemView.findViewById(R.id.ib_02);
        }

        public void setData(int position) {
            mTextView.setText(position + "");
        }

    }

    public  interface onItemClickListener {
        void onItemClick(View view, int postion);
    }

    public void setOnItemClickListener(onItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }
}
这里我写了一个接口 onItemClickListener并且通过setOnItemClickListener来实现改接口。

  public  interface onItemClickListener {
        void onItemClick(View view, int postion);
    }

    public void setOnItemClickListener(onItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }
然后通过对view的监听把当前的view和postion设置进去方法onItemClick中

 @Override
    public void onClick(View v) {
        if (mOnItemClickListener != null) {
            mOnItemClickListener.onItemClick(v, (Integer) v.getTag());
        }
    }

接下来在想调用该接口的页面就可以实现该方法来进行相关操作。比如我是在主活动页面打了一个Toast来显示当前点击了哪一个条目,并且会弹出当前点击的position是多少。

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private Context mContext;
    private RvAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        initView();

    }

    private void initView() {
        mRecyclerView = (RecyclerView) findViewById(R.id.rv);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
        mAdapter = new RvAdapter(mContext);
        mRecyclerView.setAdapter(mAdapter);
        mAdapter.setOnItemClickListener(new RvAdapter.onItemClickListener() {
            @Override
            public void onItemClick(View view, int postion) {
                Toast.makeText(mContext, postion+"", Toast.LENGTH_SHORT).show();
            }
        });

    }
}


猜你喜欢

转载自blog.csdn.net/llengnuo/article/details/78404172