我需要在我的recyclerView.
我曾经这样做过
View row = recyclerView.childAt(position);
Run Code Online (Sandbox Code Playgroud)
由于该childAt()方法基于ViewGroup,一旦滚动列表,位置就会混乱。
我在这里读到我必须使用recyclerView.findViewHolderForAdapterPosition()它返回一个ViewHolder.
我如何从我需要ViewHolder的实际View工作中获得?
我将 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) 当用户单击背景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)
截屏:
适配器类 …
所以我使用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
我可以在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列表的速度有不良影响?
我使用这个库在RecyclerView中实现了粘性标题
我想在自定义标题内添加一个可点击的视图,但是当我在中设置监听器时
public void onBindHeaderViewHolder(HeaderHolder viewholderHeader, int position)
Run Code Online (Sandbox Code Playgroud)
它忽略了我,点击后面的项目(recyclerview列表的背景选择器).
onBindHeaderViewHolder正在工作,因为我在那里有setText.我想知道一种方法,OnClickListener持续存在,视图接收它.(如果可能,不进行回收).
我们正在开发一款可以分享团体成本的应用.为此,您可以选择与您共享下一个账单的人.我制作了一种"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
我想在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
您好我正在尝试使用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) 我有一个View.OnClickListener,Recycler 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
我有一个类作为静态的一些属性,类是静态的,但我得到的错误是字段不是静态的.
我无法找到解决方案,我看到的示例看起来非常相似.视图保持器始终在适配器内部作为静态或公共静态
这是我的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) 我是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)
我看过很多视频,RecyclerView但我很困惑它ViewHolder是改变视图的适配器还是它真的只是代表屏幕上显示的每个项目。
我怎样才能更好地理解这个概念?