首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不同活动中的安卓RecyclerView onClick

不同活动中的安卓RecyclerView onClick
EN

Stack Overflow用户
提问于 2017-08-17 10:38:20
回答 2查看 1.1K关注 0票数 1

一切运行正常,我的recyclerView中的onClick正在获取我的项目的位置,但我的设计要求能够单击recyclerView的项目并打开新的活动(作为弹出窗口或弹出窗口)。我可以做到这一点,但我的问题来自于我需要在弹出窗口上显示的信息。在活动中(在Firebase值调用中),信息如下所示

attributeList.removeAll(attributeList);
for (DataSnapshot child : dataSnapshot.child("Attribute").getChildren()){
   Attribute attribute = child.getValue(Attribute.class);
            attribute_list newAttributeList = new attribute_list( attribute.Name + ": " + attribute.Value);
            attributeList.add(newAttributeList);
}
attributeAdapter = new attribute_list_adapter(attributeList, getContext());
recyclerAttribute.setAdapter(attributeAdapter);

这对于显示信息非常有效,但除了与单击关联的“值”和“名称”之外,还有更多的信息。

基本上,当我选择一个项目时,我需要获得被点击的项目的位置(我有),并将其与attributeList中的位置进行比较,这样我就可以调用Firebase调用(或以某种方式传递数据)到popover,以显示来自"Attribute“类的值(例如名称、值、描述和另一个列表(recyclerView)。

我的recyclerView:

    public class attribute_list_adapter extends RecyclerView.Adapter<attribute_list_adapter.ViewHolder> {

    private List<attribute_list> listItems;
    private Context context;

    public attribute_list_adapter(List<attribute_list> listItems, Context context) {
        this.listItems = listItems;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.attribute_list, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        attribute_list listItem = listItems.get(position);

        holder.txtTitle.setText(listItem.getTxtTitle());
    }

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

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

        public TextView txtTitle;

        public ViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            txtTitle = (TextView) itemView.findViewById(R.id.txtTitle);
        }

        @Override
        public void onClick(View v) {

        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-17 11:16:02

下面是示例:

public class attribute_list_adapter extends RecyclerView.Adapter<attribute_list_adapter.ViewHolder> {

private List<attribute_list> listItems;
private Context context;

public attribute_list_adapter(List<attribute_list> listItems, Context context) {
    this.listItems = listItems;
    this.context = context;
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.attribute_list, parent, false);
    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
   holder.itemView.setOnClickListener(new View.onClickListener() {
   @Override
   public void onClick(View v) {
     onItemClickListener.onItemClick(position);
   }
});

}


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

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView txtberita;
    ImageView imgberita;
    TextView txtnama;
    public ViewHolder(View itemView) {
        super(itemView);
        txtnama = (TextView) itemView.findViewById(R.id.txtnama);
        txtberita = (TextView) itemView.findViewById(R.id.txtberita);
        imgberita = (ImageView) itemView.findViewById(R.id.imgberita);
    }
}

   public void setOnItemClickListener(OnItemClickListener onItemClickListener){
    this.onItemClickListener = onItemClickListener;
}

OnItemClickListener onItemClickListener;

  public interface OnItemClickListener{
    void onItemClick(int position);
}
}

你的活动。在Oncreate()中

 public class TestActivity extends AppCompatActivity implements attribute_list_adapter.OnItemClickListener {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    attribute_list_adapter adapter = new attribute_list_adapter(listItems, this);
     adapter.setOnItemClickListener(this);
}

  @Override
public void onItemClick(int position) {
   // code here
}
}
票数 1
EN

Stack Overflow用户

发布于 2017-08-17 12:16:39

创建一个类似如下的接口

public interface OnSingleItemClickListener{

void onSingleItemClick(int position);
}

然后像这样在你的ViewHolder上实现它

public class ViewHolder extends RecyclerView.ViewHolder implements OnSingleItemClickListener {

    public ViewHolder(View itemView) {
        super(itemView);
    }

@Override
void onSingleItemClick(int position){
if(listItems.get(position) == listItems.get(getAdapterPosition)){
// TODO do something here
    }

}

现在,在适配器内部的OnBindViewHolder上,您必须执行此操作。

holder.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
        holder.onSingleItemClick(position);
      }
}):
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45725780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档