RecyclerView卡 - 打开新活动

时间:2015-08-13 01:50:28

标签: android onclick android-recyclerview

我有一个基本的应用程序,可以在线获取JSON文件中的一些数据。这是一个由6个项目组成的数组。每个项目由几个整数,字符串等组成。只在卡片列表中显示1个字符串和整数。

当我点击一张卡片时。应打开一个新活动,并打开更详细的视图。我已经在没有填写数据的情况下做了这个活动。只是为了构建布局。但现在我有点陷入困境。

从我的主要活动启动新Intent的正常onClick事件没有问题。问题是我不知道在卡上的按钮上实现onClick方法的位置和方法,同时仍然知道点击了哪个卡,所以我可以提供正确的信息。

有关此主题的任何想法?已经整夜搜索,但似乎每次都失败。

修改: 这6个项目存储在主要活动的列表中。所以我只需要知道被点击项目的索引号,这样我就可以在详细视图中读出正确的项目。

第二次修改 viewHolder点击不会注册任何点击...

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

    CardView cv;
    TextView parkingName;
    TextView parkingCapacity;

    ParkingViewHolder(View itemView) {
        super(itemView);

        cv = (CardView)itemView.findViewById(R.id.cv);
        parkingName = (TextView)itemView.findViewById(R.id.parkingName);
        parkingCapacity = (TextView)itemView.findViewById(R.id.parkingCapacity);
    }

    @Override
    public void onClick(View v) {
        Toast.makeText(v.getContext(), "The Item Clicked is: " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
    }

}

2 个答案:

答案 0 :(得分:1)

这就是我的工作。

你有某种ViewHolder,你可以扩展OnClickListener。

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener

在ViewHolder中,您声明应该clickListened的内容 - 例如

protected ImageView vRowImage;

public ViewHolder(View v) {
            super(v);
            vRowImage = (ImageView) v.findViewById(R.id.rowImage);

            vRowImage.setClickable(true);
            vRowImage.setOnClickListener(this);
        }

在此示例中,只有clickListened图像 - 您可以在按钮,整个视图v或任何您想要的任何内容上执行此操作。

将私有OnItemClickListener添加到适配器。

private OnItemClickListener mItemClickListener;

在ViewHolder中覆盖onClick

@Override
    public void onClick(View v) {
        if (mItemClickListener != null) {
            mItemClickListener.onItemClick(v, getLayoutPosition());
        }
    }

添加界面和设置方法

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

public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
    this.mItemClickListener = mItemClickListener;
}

在您的活动/片段中,您只需致电

mAdapter.SetOnItemClickListener(new MySomethingAdapter.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
    //you have view and position here
    }
}

答案 1 :(得分:1)

Give a hand to this code,

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;


import java.util.List;

import modals.Feeds;


/**
 * Created by inext on 3/7/15.
 */
public class CAdapter extends RecyclerView.Adapter<CAdapter.ViewHolder> {

    private List<Feeds> items;
    private Context context;

    public CAdapter(final Context context, final List<Feeds> items, final FragmentClicked listener) {
        this.items = items;
        this.listener = listener;
        this.context = context;
    }

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

    @Override
    public void onBindViewHolder(final FeedAdapter.ViewHolder holder, int position) {

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public CircleImageView userImage;
        public TextView txt_user, txt_msg, txt_minute;

        public ViewHolder(View itemView) {
            super(itemView);
            Button btn = (Button) itemView.findViewById(R.id.frag_nfrow_bt_comment);
            btn.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            Intnet in=new (context,OtherActivity.class);
startactivity(in);
        }
    }

}