Android fragments android-如何从Reyclerview中的项目启动活动?
我正在尝试使用OnClick方法从recyclerview的项目启动活动。我制作了一个接口,并在适配器中使用了getAdapterPostion。但这项活动并未启动。这是我的密码: 我在适配器中创建的接口:Android fragments android-如何从Reyclerview中的项目启动活动?,android-fragments,android-intent,android-recyclerview,Android Fragments,Android Intent,Android Recyclerview,我正在尝试使用OnClick方法从recyclerview的项目启动活动。我制作了一个接口,并在适配器中使用了getAdapterPostion。但这项活动并未启动。这是我的密码: 我在适配器中创建的接口: public interface Clicklistener{ public void itemClicked(View view,int position); } } ClickListener的Setter方法: public void setclickListener(Cl
public interface Clicklistener{
public void itemClicked(View view,int position);
}
}
ClickListener的Setter方法:
public void setclickListener(Clicklistener clickListener){
this.clickListener = clickListener;
}
public class ViewHolderListMovies extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView movieThumbnail;
private TextView movieTitle;
private TextView movieYear;
public ViewHolderListMovies(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
movieThumbnail = (ImageView) itemView.findViewById(R.id.video_poster);
movieTitle = (TextView) itemView.findViewById(R.id.video_name);
movieYear = (TextView) itemView.findViewById(R.id.video_year);
}
@Override
public void onClick(View v) {
if(clickListener!=null){
clickListener.itemClicked(v,getAdapterPosition());
}
}
我在其中设置OnClickListener的View Holder方法:
public void setclickListener(Clicklistener clickListener){
this.clickListener = clickListener;
}
public class ViewHolderListMovies extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView movieThumbnail;
private TextView movieTitle;
private TextView movieYear;
public ViewHolderListMovies(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
movieThumbnail = (ImageView) itemView.findViewById(R.id.video_poster);
movieTitle = (TextView) itemView.findViewById(R.id.video_name);
movieYear = (TextView) itemView.findViewById(R.id.video_year);
}
@Override
public void onClick(View v) {
if(clickListener!=null){
clickListener.itemClicked(v,getAdapterPosition());
}
}
我在片段中初始化了接口:
listMoviesAdapter.setclickListener(this);
最后,我在片段中开始了调用所需活动的意图:
@Override
public void itemClicked(View view, int position) {
startActivity(new Intent(getActivity(),MovieDetailsActivity.class));
}
感谢您的帮助。谢谢 在方法onBindViewHolder中初始化setoncliklistener。举个例子,也许会有帮助
public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHolder> {
private Context mContext;
private List<String> mDataSet;
private List<String> mIdevent;
public HistoryAdapter(Context context, List<String> dataSet, List<String> idevent, List<String> askPrice,
List<String> bidPrice, List<String> Profit) {
mContext = context;
mDataSet = dataSet;
mIdevent = idevent;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext)
.inflate(R.layout.layout_list_history, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Picasso.with(mContext).load(R.drawable.add2new).into(holder.image);
holder.text.setText(mDataSet.get(position));
holder.setClickListener(new HistoryAdapter.ViewHolder.ClickListener() {
public void onClick(View v, int pos, boolean isLongClick) {
if (isLongClick) {
// View v at position pos is long-clicked.
String poslx = pos + "";
String menax = mDataSet.get(pos);
Toast.makeText(mContext, "longclick pos. " + poslx + " pair " + menax, Toast.LENGTH_SHORT).show();
} else {
// View v at position pos is clicked.
//String possx = pos + "";
String poslx = pos + "";
String event2 = mDataSet.get(pos);
String id2 = mIdevent.get(pos);
Toast.makeText(mContext, "shortclick pos. " + poslx + " pair " + event2, Toast.LENGTH_SHORT).show();
//toggleSelection(pos);
Intent i = new Intent(mContext, HistoryCandlesActivity.class);
Bundle extras = new Bundle();
extras.putString("eventx", event2);
extras.putString("idx", id2);
extras.putInt("whatspage", 0);
i.putExtras(extras);
v.getContext().startActivity(i);
}
}
});
}
@Override
public int getItemCount() {
return mDataSet.size();
}
public void remove(int position) {
mDataSet.remove(position);
notifyItemRemoved(position);
}
public void add(String text, int position) {
mDataSet.add(position, text);
notifyItemInserted(position);
}
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
public ImageView image;
public TextView text;
private ClickListener clickListener;
public ViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.image);
text = (TextView) itemView.findViewById(R.id.text);
// We set listeners to the whole item view, but we could also
// specify listeners for the title or the icon.
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
/* Interface for handling clicks - both normal and long ones. */
public interface ClickListener {
/**
* Called when the view is clicked.
*
* @param v view that is clicked
* @param position of the clicked item
* @param isLongClick true if long click, false otherwise
*/
public void onClick(View v, int position, boolean isLongClick);
}
/* Setter for listener. */
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
@Override
public void onClick(View v) {
// If not long clicked, pass last variable as false.
clickListener.onClick(v, getPosition(), false);
}
@Override
public boolean onLongClick(View v) {
// If long clicked, passed last variable as true.
clickListener.onClick(v, getPosition(), true);
return true;
}
}
}
公共类HistoryAdapter扩展了RecyclerView.Adapter{
私有上下文;
私有列表数据集;
私人列表中期活动;
public HistoryAdapter(上下文上下文、列表数据集、列表idevent、列表askPrice、,
标价、标价、利润){
mContext=上下文;
mDataSet=数据集;
中间事件=中间事件;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutFlater.from(mContext)
.充气(R.layout.layout\u list\u历史记录,父项,false);
返回新的视图持有者(v);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
毕加索.with(mContext).load(R.drawable.add2new).into(holder.image);
holder.text.setText(mDataSet.get(position));
setClickListener(新的HistoryAdapter.ViewHolder.ClickListener(){
公共void onClick(视图v、int-pos、布尔值isLongClick){
如果(单击){
//长时间单击位置处的视图v。
字符串poslx=pos+“”;
字符串menax=mDataSet.get(pos);
Toast.makeText(mContext,“longclick pos.”+poslx+“pair”+menax,Toast.LENGTH_SHORT).show();
}否则{
//单击位置处的视图v。
//字符串possx=pos+“”;
字符串poslx=pos+“”;
字符串event2=mDataSet.get(pos);
字符串id2=mIdevent.get(pos);
Toast.makeText(mContext,“shortclick pos.”+poslx+“pair”+event2,Toast.LENGTH_SHORT).show();
//切换选择(pos);
意图i=新意图(mContext,HistoryCandlesActivity.class);
Bundle extras=新Bundle();
额外的putString(“eventx”,event2);
额外输入字符串(“idx”,id2);
额外输入(“whatspage”,0);
i、 临时演员(临时演员);
v、 getContext().startActivity(i);
}
}
});
}
@凌驾
public int getItemCount(){
返回mDataSet.size();
}
公共无效删除(内部位置){
mDataSet.remove(位置);
已移除(位置)的项目;
}
公共空添加(字符串文本,int位置){
添加(位置、文本);
(位置);
}
静态类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener、View.OnLongClickListener{
公众形象;
公共文本查看文本;
私有ClickListener ClickListener;
公共视图持有者(视图项视图){
超级(项目视图);
image=(ImageView)itemView.findViewById(R.id.image);
text=(TextView)itemView.findViewById(R.id.text);
//我们将侦听器设置为整个项目视图,但也可以
//为标题或图标指定侦听器。
setOnClickListener(这个);
setOnLongClickListener(此);
}
/*处理点击的界面-正常和长点击*/
公共界面ClickListener{
/**
*单击视图时调用。
*
*@param v单击的视图
*@param单击项目的位置
*@param isLongClick如果长时间单击则为true,否则为false
*/
public void onClick(视图v、int位置、布尔值isLongClick);
}
/*侦听器的Setter*/
公共无效设置ClickListener(ClickListener ClickListener){
this.clickListener=clickListener;
}
@凌驾
公共void onClick(视图v){
//如果没有长时间单击,则将最后一个变量作为false传递。
单击Listener.onClick(v,getPosition(),false);
}
@凌驾
仅长按公共布尔值(视图v){
//如果长时间单击,则将最后一个变量作为true传递。
单击Listener.onClick(v,getPosition(),true);
返回true;
}
}
}
在方法onBindViewHolder中初始化setoncliklistener。举个例子,也许会有帮助
public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHolder> {
private Context mContext;
private List<String> mDataSet;
private List<String> mIdevent;
public HistoryAdapter(Context context, List<String> dataSet, List<String> idevent, List<String> askPrice,
List<String> bidPrice, List<String> Profit) {
mContext = context;
mDataSet = dataSet;
mIdevent = idevent;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext)
.inflate(R.layout.layout_list_history, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Picasso.with(mContext).load(R.drawable.add2new).into(holder.image);
holder.text.setText(mDataSet.get(position));
holder.setClickListener(new HistoryAdapter.ViewHolder.ClickListener() {
public void onClick(View v, int pos, boolean isLongClick) {
if (isLongClick) {
// View v at position pos is long-clicked.
String poslx = pos + "";
String menax = mDataSet.get(pos);
Toast.makeText(mContext, "longclick pos. " + poslx + " pair " + menax, Toast.LENGTH_SHORT).show();
} else {
// View v at position pos is clicked.
//String possx = pos + "";
String poslx = pos + "";
String event2 = mDataSet.get(pos);
String id2 = mIdevent.get(pos);
Toast.makeText(mContext, "shortclick pos. " + poslx + " pair " + event2, Toast.LENGTH_SHORT).show();
//toggleSelection(pos);
Intent i = new Intent(mContext, HistoryCandlesActivity.class);
Bundle extras = new Bundle();
extras.putString("eventx", event2);
extras.putString("idx", id2);
extras.putInt("whatspage", 0);
i.putExtras(extras);
v.getContext().startActivity(i);
}
}
});
}
@Override
public int getItemCount() {
return mDataSet.size();
}
public void remove(int position) {
mDataSet.remove(position);
notifyItemRemoved(position);
}
public void add(String text, int position) {
mDataSet.add(position, text);
notifyItemInserted(position);
}
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
public ImageView image;
public TextView text;
private ClickListener clickListener;
public ViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.image);
text = (TextView) itemView.findViewById(R.id.text);
// We set listeners to the whole item view, but we could also
// specify listeners for the title or the icon.
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
/* Interface for handling clicks - both normal and long ones. */
public interface ClickListener {
/**
* Called when the view is clicked.
*
* @param v view that is clicked
* @param position of the clicked item
* @param isLongClick true if long click, false otherwise
*/
public void onClick(View v, int position, boolean isLongClick);
}
/* Setter for listener. */
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
@Override
public void onClick(View v) {
// If not long clicked, pass last variable as false.
clickListener.onClick(v, getPosition(), false);
}
@Override
public boolean onLongClick(View v) {
// If long clicked, passed last variable as true.
clickListener.onClick(v, getPosition(), true);
return true;
}
}
}
公共类HistoryAdapter扩展了RecyclerView.Adapter{
私有上下文;
私有列表数据集;
私人列表中期活动;
public HistoryAdapter(上下文上下文、列表数据集、列表idevent、列表askPrice、,
标价、标价、利润){
mContext=上下文;
mDataSet=数据集;
中间事件=中间事件;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutFlater.from(mContext)
.充气(R.layout.layout\u list\u历史记录,父项,false);
返回新的视图持有者(v);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
毕加索.with(mContext).load(R.drawable.add2new).into(holder.image);
holder.text.setText(mDataSet.get(position));
setClickListener(新的HistoryAdapter.ViewHolder.ClickListener(){
公共void onClick(视图v、int-pos、布尔值isLongClick){
如果(单击){
//长时间单击位置处的视图v。
字符串poslx=pos+“”;
字符串menax=mDataSet.get(pos);
Toast.makeText(mContext,“longclick pos.”+poslx+“pair”+menax,Toast.LENGTH_SHORT).show();
}否则{
//单击位置处的视图v。
//字符串possx=pos+“”;
字符串poslx=pos+“”;