Android 如何将视图Id从回收器适配器传递给活动?

Android 如何将视图Id从回收器适配器传递给活动?,android,android-recyclerview,android-view,Android,Android Recyclerview,Android View,单击“回收器视图”列表项时,我正在尝试将视图Id从“回收器视图适配器”传递给“活动” public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> implements FastScrollRecyclerView.SectionedAdapter{ public interface OnRecyclerItemClickListener { void onRecyclerItem

单击“回收器视图”列表项时,我正在尝试将视图Id从“回收器视图适配器”传递给“活动”

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> implements FastScrollRecyclerView.SectionedAdapter{

    public interface OnRecyclerItemClickListener {
        void onRecyclerItemClick(User data,int id);
    }

    List<User> dataSource;
    private OnRecyclerItemClickListener onRecyclerItemClickListener;
    private Context context;
    public ActiveBeepsAdapter(List<User> dataArgs, OnRecyclerItemClickListener onRecyclerItemClickListener,Context context) {
        this.dataSource = dataArgs;
        this.onRecyclerItemClickListener = onRecyclerItemClickListener;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // create a new view
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_active_message, parent, false);
        ViewHolder viewHolder = new ViewHolder(view, onRecyclerItemClickListener);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        User user = dataSource.get(position);
        holder.tvId.setText(user.getId());
        Picasso.with(context)
            .load(user.getProfilePicUrl())
            .placeholder(R.drawable.bg_logo)
            .error(R.drawable.bg_logo)
            .transform(new CircleTransform())
            .into(holder.ivUserProfile);   
    }

    @Override
    public int getItemCount() {
        return dataSource.size();
    }

    @NonNull
    @Override
    public String getSectionName(int i) {
        return String.valueOf(dataSource.get(i).getId().charAt(0));
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private OnRecyclerItemClickListener onRecyclerItemClickListener;
        User data = new User();
        TextView tvId;
        ImageView ivUserProfile;
        public ViewHolder(View itemView, OnRecyclerItemClickListener onRecyclerItemClickListener) {
            super(itemView);
            this.onRecyclerItemClickListener = onRecyclerItemClickListener;
            tvId = (TextView)itemView.findViewById(R.id.tvName);
            ivUserProfile = (ImageView)itemView.findViewById(R.id.ivProfilePic); 
        }

        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            User user = dataSource.get(position);
            int id = v.getId();
            onRecyclerItemClickListener.onRecyclerItemClick(user,id);
        }
    }
}
公共类适配器扩展了RecyclerView。适配器实现了FastScrollRecyclerView.SectionAdapter{
RecyclerItemClickListener上的公共界面{
void onRecyclerItemClick(用户数据,整数id);
}
列出数据源;
私有OnRecyclerItemClickListener OnRecyclerItemClickListener;
私人语境;
public-ActiveBeepsAdapter(列出数据参数、OnRecyclerItemClickListener、OnRecyclerItemClickListener、上下文上下文){
this.dataSource=dataArgs;
this.onRecyclerItemClickListener=onRecyclerItemClickListener;
this.context=上下文;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
//创建新视图
View=LayoutFlater.from(parent.getContext()).flate(R.layout.single\u active\u消息,parent,false);
ViewHolder ViewHolder=新的ViewHolder(视图,onRecyclerItemClickListener);
返回视图持有者;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
User=dataSource.get(位置);
holder.tvId.setText(user.getId());
毕加索。与(上下文)
.load(user.getProfilePicUrl())
.占位符(R.drawable.bg_徽标)
.错误(R.drawable.bg_徽标)
.transform(新的CircletTransform())
.into(holder.ivUserProfile);
}
@凌驾
public int getItemCount(){
返回dataSource.size();
}
@非空
@凌驾
公共字符串getSectionName(int i){
返回String.valueOf(dataSource.get(i).getId().charAt(0));
}
公共类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
私有OnRecyclerItemClickListener OnRecyclerItemClickListener;
用户数据=新用户();
文本视图tvId;
ImageView-ivUserProfile;
公共视图持有者(查看项目视图,OnRecyclerItemClickListener OnRecyclerItemClickListener){
超级(项目视图);
this.onRecyclerItemClickListener=onRecyclerItemClickListener;
tvId=(TextView)itemView.findViewById(R.id.tvName);
ivUserProfile=(ImageView)itemView.findViewById(R.id.ivProfilePic);
}
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
User=dataSource.get(位置);
int id=v.getId();
onRecyclerItemClickListener.onRecyclerItemClick(用户,id);
}
}
}
假设,如果单击了配置文件图像,则视图id应发送到“活动”

还有我的活动

    @EActivity
    public class ActiveMessage extends AppCompatActivity implements Adapter.OnRecyclerItemClickListener{

        @ViewById(R.id.toolbar)
        Toolbar toolbar;

        @ViewById(R.id.rvactiveMessage)
        FastScrollRecyclerView rvmessage;

        List<User> allUser;

        @ViewById(R.id.toolbar_title)
        TextView tv_toolbar;

        @AfterViews
        protected void init(){

            toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_drop_down_black_24dp));
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            tv_toolbar.setText("Active Message");
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onBackPressed();
                }
            });
            allUser = new ArrayList<>();
            User user;
            String fullName[] = {"ajay","kamal","akhil"};
            String id[] = {"its_ajay","its_kamal","its_akhil"};
            for(int i=0;i<id.length;i++){
               user = new User();
               user.setId(id[i]);
               user.setFullName(fullName[i]);
               allUser.add(user);
            }
Adapter adapter = new Adapter(allUser,this,getApplicationContext());
rvmessage.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
rvmessage.setAdapter(activeBeepsAdapter);

        }

        @Override
        public void onRecyclerItemClick(User data,int id) {
            if (!Utils.isNetworkAvailable(getApplicationContext())) {
                   noInternet();
            }
            // tvName has multiple Implementation  
            if (id == R.id.tvName){
                 Log.d("Id",data.getId());
            }
        }
        public void noInternet(){

            final Dialog dialog = new Dialog(this);
            dialog.setContentView(R.layout.alert_dialog);
            dialog.show();
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_active_message);
        }
        @Override
        public void onBackPressed() {
            super.onBackPressed();
            finish();
        }
    }
@EActivity
公共类ActiveMessage扩展AppCompatActivity实现Adapter.OnRecyclerItemClickListener{
@ViewById(R.id.toolbar)
工具栏;
@ViewById(R.id.rvactiveMessage)
FastScrollRecyclerViewRVMessage;
列出诱惑者;
@ViewById(R.id.toolbar\u标题)
文本视图tv_工具栏;
@后景
受保护的void init(){
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_drop_down_black_24dp));
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
tv_toolbar.setText(“活动消息”);
toolbar.setNavigationOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
onBackPressed();
}
});
allUser=新的ArrayList();
用户;
字符串全名[]={“ajay”、“kamal”、“akhil”};
字符串id[]={“its_ajay”、“its_kamal”、“its_akhil”};
对于(int i=0;i
在适配器onClick方法(而不是id pass视图)中:

正在活动中

在适配器onClick方法(而不是id pass视图)中:

正在活动中


如果要发送视图,请将接口方法参数更改为view,而不是id public interface on RecyclerItemClickListener{void on RecyclerItemClick(用户数据,视图);}如果要发送视图,请将接口方法参数更改为view,而不是id public interface on RecyclerItemClickListener{void onRecyclerItemClick(用户数据,视图);}
    @Override
    public void onClick(View v) {
        int position = getAdapterPosition();
        User user = dataSource.get(position);
        int id = v.getId();
        onRecyclerItemClickListener.onRecyclerItemClick(user,v);
    }
@Override
    public void onRecyclerItemClick(User data,View view) {
        if (!Utils.isNetworkAvailable(getApplicationContext())) {
               noInternet();
        }
        // tvName has multiple Implementation  
        if (view.getId() == R.id.tvName){
             Log.d("Id",data.getId());
        }
    }