标签: android-viewholder

Android - 从 RecyclerView.findViewHolderForAdapterPosition() 获取行

我需要在我的recyclerView.

我曾经这样做过

View row = recyclerView.childAt(position);
Run Code Online (Sandbox Code Playgroud)

由于该childAt()方法基于ViewGroup,一旦滚动列表,位置就会混乱。

在这里读到我必须使用recyclerView.findViewHolderForAdapterPosition()它返回一个ViewHolder.

我如何从我需要ViewHolder的实际View工作中获得?

android android-viewholder android-recyclerview

2
推荐指数
1
解决办法
2078
查看次数

如何从适配器外部访问 Recyclerview.ViewHolder 参数?

我将 recyclerview 附加到 SnapHelper。然后我为 recyclerview 制作了 scrollListener 并且每次将项目捕捉到显示的中心时,我都会找到那个捕捉的视图,然后我将通过 finViewHolderForAdapterPosition() 获取它的 viewHolder 实例。现在我想要的是访问在 ViewHolder 中创建的自定义变量。有什么方法可以访问它吗?基本上这个变量是在 onBindViewHolder() 中设置的,它包含自定义对象,其统计信息显示在这个快照视图中。所以我想从那个视图中提取那个 json 对象。

//inside onBindViewHolder()
holder.addressEntity = it
Run Code Online (Sandbox Code Playgroud)

我试过这个,但没有检测到这个变量。只能访问 itemView(构造函数中作为参数发送的变量)。

addressRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
        override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) {
            if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                val centerView = snapHelper.findSnapView(addressRecyclerView.layoutManager)
                centerView!!.setBackgroundResource(R.drawable.payment_button_active)
                lastSnappedView = centerView
                val childViewHolder: RecyclerView.ViewHolder = recyclerView!!.findViewHolderForAdapterPosition(viewManager.getPosition(centerView))
                val selectedViewAddress: Address = childViewHolder.addressEntity //this doesnt work -- selectedViewAddress is red
                AndroidAssets.getInstance(context!!).deliveryAddress = selectedViewAddress 

            } else if (lastSnappedView != null){
                lastSnappedView!!.setBackgroundResource(R.drawable.payment_button_inactive)
                lastSnappedView = null
            } …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-viewholder android-recyclerview

2
推荐指数
1
解决办法
1173
查看次数

更改 recyclerview 中所有其他元素的背景

当用户单击背景cardView中的a 时recyclerView,其背景会改变颜色以显示其所选内容。我正在努力解决的是,当我选择另一张卡时,我希望之前选择的卡返回到“未选择”形式。

如何才能让之前的选择cardview恢复正常呢?

这就是我到目前为止所拥有的

private fun updateRecyclerViewTest(items: List<Item>) {
    val list = ArrayList<Item>()
    fun init() {
        recycler_view_test.apply {
            layoutManager = LinearLayoutManager(this@EditModActivity, LinearLayoutManager.HORIZONTAL, false)
            adapter = GroupAdapter<ViewHolder>().apply {
                testSection = Section(items)
                add(testSection)
                setOnItemClickListener(onItemClick)
            }
        }
        shouldInitRecyclerView = false
    }
    if (shouldInitRecyclerView)
        init()
    else
    {
        testSection.update(items)
        testSection.setHeader(items[1])
    }
}

private val onItemClick = OnItemClickListener { item, view ->
    if (item is TestItem) {
        view.backgroundColorResource = R.color.colorAccent1
        txtview1.text = item.test.Desc
        txtview2.text = item.test.module
    }
}
Run Code Online (Sandbox Code Playgroud)

截屏:

在此输入图像描述

适配器类 …

android android-viewholder android-recyclerview

2
推荐指数
1
解决办法
1370
查看次数

带有凌空图像请求的循环器视图(取消请求)

所以我使用Recycler视图在网格中显示图像,并使用volley库从url下载图像作为位图.

public void onBindViewHolder(final TrendingAdapter.ViewHolder viewHolder, int i) {
    ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap bitmap) {
            if (bitmap != null) {
                viewHolder.getmImageView().setImageBitmap(bitmap);
            }
        }
    }, 0, 0, null,
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                }
            });
    AppController.getInstance().addToRequestQueue(request);
}
Run Code Online (Sandbox Code Playgroud)

问题是当我在下载图像之前滚动并跳过一个或多个视图并且该视图被回收时,图像donwnload reqest在这些中间视图上没有被取消,导致在实际图像之前闪现那些/那些图像加载在该视图中.

所以我想用标签取消那些中间图像请求,但无法弄清楚如何在其他并行视图中取消请求!

此外,当我使用凌空NetworkImageView(它自己这样的图像取消)给出了完美的结果.但我需要获取每个图像的位图来从中选择颜色,所以我不能使用NetworkImageView.

问)如何在使用recyclerview充气的特定imageview上取消所有待处理的凌空图像请求(除了它应该加载并且不影响其他平行视图的那个)?

android bitmap android-volley android-viewholder android-recyclerview

1
推荐指数
1
解决办法
5257
查看次数

Android:在onBindViewHolder中输入setOnclickListener或setOnLongClickListener是否正确?

我可以在onBindViewHolder中放置setOnclickListener或setOnLongClickListener吗?

onBindViewHolder写这个方法没问题?(是否明智?)

还是ViewHolder写得更好?

public void onBindViewHolder(ViewHolder holder, int position) {


    myBtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            //...
        }
    }); }
Run Code Online (Sandbox Code Playgroud)

这种方法对RecyclerView列表的速度有不良影响?

android view android-viewholder android-recyclerview

1
推荐指数
1
解决办法
1512
查看次数

如何在RecyclerView Header Decor中设置监听器?

我使用这个库在RecyclerView中实现了粘性标题

我想在自定义标题内添加一个可点击的视图,但是当我在中设置监听器时

public void onBindHeaderViewHolder(HeaderHolder viewholderHeader, int position)
Run Code Online (Sandbox Code Playgroud)

它忽略了我,点击后面的项目(recyclerview列表的背景选择器).

onBindHeaderViewHolder正在工作,因为我在那里有setText.我想知道一种方法,OnClickListener持续存在,视图接收它.(如果可能,不进行回收).

android header android-viewholder android-recyclerview

1
推荐指数
1
解决办法
3055
查看次数

Recyclerview中的多个edittext

我们正在开发一款可以分享团体成本的应用.为此,您可以选择与您共享下一个账单的人.我制作了一种"list-view-item",其中包含每个用户的"借记"和"信用"字段,并根据共享付款的人数将这些项目添加到Recyclerview.但是,现在我正在尝试读取在这些edittexts中输入的所有值,但我不知道如何.在recyclerview中生成列表的代码如下:

private void initRecyclerView() {
    rvTransactions = (RecyclerView) findViewById(R.id.rvTransactions);
    lmTransactions = new LinearLayoutManager(this);
    rvTransactions.setLayoutManager(lmTransactions);
    transactionAdapter = new RecyclerView.Adapter<CustomViewHolder>() {
        @Override
        public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item_transaction, viewGroup, false);
            return new CustomViewHolder(view);
        }

        @Override
        public void onBindViewHolder(CustomViewHolder viewHolder, int i) {
            viewHolder.noticeSubject.setText(participatingUsers.get(i).getFirstname() + " " + participatingUsers.get(i).getLastname());
        }

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

    };
    rvTransactions.setAdapter(transactionAdapter);
}

private class CustomViewHolder extends RecyclerView.ViewHolder {

    private TextView noticeSubject;
    private EditText userDebt,userCredit;

    public CustomViewHolder(View itemView) {
        super(itemView); …
Run Code Online (Sandbox Code Playgroud)

android android-edittext android-viewholder android-recyclerview

1
推荐指数
1
解决办法
5372
查看次数

如何在RecyclerView中隐藏视图

我想在RecyclerView的项目中隐藏View.我if/else在BindViewHolder中有声明,如下所示:

if (position == list.size() - 1)
{
   holder.divider.setVisibility(View.Gone)
}
Run Code Online (Sandbox Code Playgroud)

它最初工作,我的视图消失但当我向后滚动时,一些视图也消失了,我不知道解决这个问题,我试过holder.getAdapterposition但仍然发生了同样的事情.如果有人可以帮助我,我将非常感激.

android android-studio android-viewholder android-recyclerview

1
推荐指数
1
解决办法
2236
查看次数

如何将背景传递给毕加索

您好我正在尝试使用Picasso添加图像,但是当我使用以下视图持有者时,在适配器中获取Picasso的上下文时遇到问题:

这是我的适配器

               public class DataAdapter extends 
                  RecyclerView.Adapter<DataAdapter.ViewHolder> {
                            private ArrayList<String> 
                              al_prod_name,al_prod_price,al_prod_id,
                                 al_prod_image;

                    public DataAdapter(ArrayList<String> al_prod_id, 
                           ArrayList<String> al_prod_name,
                               ArrayList<String> al_prod_price, 
                                  ArrayList<String> al_prod_image) {
                                   this.al_prod_id = al_prod_id;
                                   this.al_prod_price = al_prod_price;
                                   this.al_prod_name = al_prod_name;
                                   this.al_prod_image = al_prod_image
                               }


                      public DataAdapter.ViewHolder 
                         onCreateViewHolder(ViewGroup viewGroup, int i) {
                              View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardrow, viewGroup, 
                                    false);
                              return new ViewHolder(view);
                             }

                        public void onBindViewHolder(DataAdapter.ViewHolder 
                          viewHolder, int i) {

                             viewHolder.tv_prod_name.setText
                               (al_prod_name.get(i));
                             viewHolder.tv_prod_price.setText
                               (al_prod_price.get(i));

                        Picasso.with().load(al_prod_image.get(i))
                       .placeholder(R.drawable.floatingicon)
                       .error(R.drawable.floatingicon).
                       .into(viewHolder.img_prod);

                          }
                      public int getItemCount() {
                      return al_prod_id.size();
                      }

                   public class ViewHolder extends RecyclerView.ViewHolder{ …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder

1
推荐指数
1
解决办法
3603
查看次数

View.OnClickListener 不工作

我有一个View.OnClickListenerRecycler View但是每当我单击视图时,它都不会触发该onClick事件

这是代码:

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    TextView name;
    ImageView image;
    Context context;
    ArrayList<Categories_Model_Class> arrayList;

    public ViewHolder(View view, Context context, ArrayList<Categories_Model_Class> arrayList) {
        super(view);
        name = view.findViewById(R.id.category_name);
        image = view.findViewById(R.id.category_image);
        this.context = context;
        this.arrayList = arrayList;
        view.setOnClickListener(this);
        Log.i("Created", "ViewHolder");
    }

    @Override
    public void onClick(View view) {
        //Pair<View, String> pair1 = Pair.create((View) this.image, this.image.getTransitionName());
        Intent intent = new Intent(context, FullWallpaperViewActivity.class);
        //ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity)context, pair1);
        context.startActivity(intent);
        Log.i("TOUCH", "TOUCH");
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?

  • CardView …

android onclicklistener android-viewholder android-recyclerview

1
推荐指数
1
解决办法
6002
查看次数

无法从静态上下文引用非静态字段

我有一个类作为静态的一些属性,类是静态的,但我得到的错误是字段不是静态的.

我无法找到解决方案,我看到的示例看起来非常相似.视图保持器始终在适配器内部作为静态公共静态

这是我的ArrayAdapter:

public class NoteAdapter extends ArrayAdapter<Note> {

public static class ViewHolder{
    TextView noteTitle;
    TextView noteBody;
    ImageView noteIcon;
}

public NoteAdapter(Context context, ArrayList<Note> notes) {
    super(context, 0, notes);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Note note = getItem(position);
    ViewHolder viewHolder;

    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_row, parent, false);

        // == Here I am getting the error == 
        ViewHolder.noteTitle = (TextView) convertView.findViewById(R.id.text_item_note_title);
        ViewHolder.noteBody = (TextView) convertView.findViewById(R.id.text_item_note_body); …
Run Code Online (Sandbox Code Playgroud)

java android android-arrayadapter android-viewholder

0
推荐指数
1
解决办法
2383
查看次数

无法在RecyclerView中解析视图持有者

我是RecyclerView的新手,我想实现这一点,但是问题是我无法解析以下代码中的Viewholder引用,请帮帮我

class ViewAdapter : RecyclerView.Adapter<ViewAdapter.ViewHolder>(){
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewAdapter.ViewHolder {
        // return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.slider, parent, false))
    // }
     }

     override fun getItemCount(): Int {
         TODO("not implemented") 
     }

     override fun onBindViewHolder(holder: ViewAdapter.ViewHolder, position: Int) {
         TODO("not implemented") 
     }


 }
Run Code Online (Sandbox Code Playgroud)

代码截图

android kotlin android-viewholder android-recyclerview

0
推荐指数
1
解决办法
67
查看次数

如何正确理解 RecyclerView

我看过很多视频,RecyclerView但我很困惑它ViewHolder是改变视图的适配器还是它真的只是代表屏幕上显示的每个项目。

我怎样才能更好地理解这个概念?

android android-viewholder android-recyclerview

0
推荐指数
1
解决办法
210
查看次数