我有一个基本的应用程序,可以在线获取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();
}
}
答案 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);
}
}
}