Android RecyclerView onClick在不同的Activity中

时间:2017-08-17 02:38:20

标签: android firebase firebase-realtime-database android-recyclerview

一切正常,我的recyclerView中的onClick正在处理我的项目的位置,但我的设计要求是能够点击recyclerView的项目并打开一个新的活动(作为一个popover或弹出)。我可以做到这一点,但我的问题来自我需要在popover上显示的信息。活动内部(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显示“属性”类中的值(例如名称,值,描述和其他列表(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) {

        }
    }
}

2 个答案:

答案 0 :(得分:1)

这是一个例子:

btnStart.FindByName<Button>("button").Clicked += btnStartClick;

你的活动。在Oncreate()

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

答案 1 :(得分:0)

创建类似

的界面
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);
      }
}):