簡體   English   中英

如何在回收站視圖中單擊

[英]how to click in recycler view

我有一個問題,使 aa recycler view 可以被點擊,但我不知道它是如何工作的。 但也許適配器必須改變才能實現,但我有點困惑如何去做。

這是我的適配器

class MainAdapter(val teamFeed: LastActivity.TeamFeed) :
    RecyclerView.Adapter<ViewHolder>() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    val team = teamFeed.events.get(position)
    holder.itemView.home_team.text = team.strHomeTeam
    holder.itemView.away_team.text = team.strAwayTeam
    holder.itemView.home_score.text = team.intHomeScore
    holder.itemView.away_score.text = team.intAwayScore
    holder.itemView.tanggal.text = team.dateEvent
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {

    val layoutInflater = LayoutInflater.from(parent?.context)
    val cellForRow = layoutInflater.inflate(R.layout.item_layout, parent, false)

    return ViewHolder(cellForRow)
}


    override fun getItemCount(): Int {
    return teamFeed.events.count()
}


override fun getItemViewType(position: Int): Int {
    return position
}
class ViewHolder(val view: View) : RecyclerView.ViewHolder(view)

}

這是一個我想通過點擊來表達意圖的活動

client.newCall(request).enqueue(object : Callback, okhttp3.Callback {
        override fun onResponse(call: okhttp3.Call?, response: okhttp3.Response?) {
            val body = response?.body()?.string()
            println(body)

            val gson = GsonBuilder().create()
            val teamFeed = gson.fromJson(body, TeamFeed::class.java)

            runOnUiThread {
                recyclerView_main.adapter = MainAdapter(teamFeed)

            }
        }

        override fun onFailure(call: okhttp3.Call?, e: IOException) {
            println("failed")
        }

    })

請幫助如何使它工作

原始帖子可以在這里找到

進一步的討論可以在這里找到

這是為RecyclerView實現OnClickListener一種更好且耦合度更低的方法。

使用片段:

RecyclerView recyclerView = findViewById(R.id.recycler);
recyclerView.addOnItemTouchListener(
    new RecyclerItemClickListener(context, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() {
      @Override public void onItemClick(View view, int position) {
        // do whatever
      }

      @Override public void onLongItemClick(View view, int position) {
        // do whatever
      }
    })
);

RecyclerItemClickListener實現:

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;


public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
  private OnItemClickListener mListener;

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

    public void onLongItemClick(View view, int position);
  }

  GestureDetector mGestureDetector;

  public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
    mListener = listener;
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }

        @Override
        public void onLongPress(MotionEvent e) {
            View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
            if (child != null && mListener != null) {
                mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
            }
        }
    });
}

  @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
    View childView = view.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
      mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
      return true;
    }
    return false;
  }

  @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }

  @Override
  public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
}

我希望這對你有幫助

這樣,從您的 Viewholder 實現 OnClickListener 事件

ClickListener.kt接口

interface ClickListener {
    fun onClick(view:View, index:Int)
}

MainAdapter OnClick實現

class MainAdapter(val teamFeed: LastActivity.TeamFeed, var listener: ClickListener) : RecyclerView.Adapter<MainAdapter.ViewHolder>() {
...
...
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val layoutInflater = LayoutInflater.from(parent?.context)
    val cellForRow = layoutInflater.inflate(R.layout.item_layout, parent, false)

    return ViewHolder(cellForRow, listener)
}
...
...
class ViewHolder(val view: View,  listener:ClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener{
    var listener: ClickListener?=null
    init{
        this.listener=listener
        itemView.setOnClickListener(this)
    }
    override fun onClick(view: View?) {
        this.listener?.onClick(view!!, adapterPosition)
    }
}

使用片段:

var recyclerview=findViewById(R.id.recyclerview)
var mainAdapter=MainAdapter(/*LastActivity.TeamFeed parameter*/, object : ClickListener{
                override fun onClick(view: View, index: Int) {
                    //do whatever
                }
            })
recyclerview.adapter=mainAdapter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM