Articles of android viewholder

viewHolder.getAdapterPosition()始终返回-1

由于某种原因,我无法使用holder.getAdapterPosition()因为它总是返回-1但holder.getLayoutPosition()返回一个位置就好了。 我的onCreateViewHolder: @覆盖 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_item, parent, false); ViewHolder vh = new ViewHolder(this, v); return vh; } 我的ViewHolder构造函数: public ViewHolder(DirectoryListAdapter adapter, View linear) { super(linear); this.adapter = adapter; this.linear = (LinearLayout) linear; this.entryName = (TextView) linear.findViewById(R.id.item_name); this.entryImage = (ImageView) linear.findViewById(R.id.item_image); } […]

我应该在哪里将setOnClickListener放在RecyclerView适配器中

在互联网上的教程中,他们在RecyclerView的Adapter中设置了OnClickListener,它们以两种方式定义它:在ViewHolder内部或在BindViewHolder内部。 我的问题是哪一个是更好的方法,请推荐任何其他方法(如果有的话) 1)在ViewHolder中: public static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); tvSrc = (TextView) itemView.findViewById(R.id.tvSrc); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), “inside viewholder position = ” + getAdapterPosition(), Toast.LENGTH_SHORT).show(); } }); } 2)在BindViewHolder中 public void onBindViewHolder(DisplayTrainsAdapter.ViewHolder viewHolder, final int position) { viewHolder.tvSrc.setText(mDataset.get(position).strSrc); viewHolder.tvSrc.setOnClickListener(new View.OnClickListener() { @Override public […]

使用Android中的Firebase在单个RecyclerView中获取两个不同的视图

我开发了一个应用程序,其中有两个post 使用毕加索的图像文章 使用Youtube Api的videopost。 我已经使用RecyclerView和Firebase recyclerAdapter实现了这两个问题,但问题是我不知道如何区分两个视图,如果我使用Youtube Api使用video视图它附加了图像视图并且还复制到recyclerView中的所有项目,然后所有项目中只播放一个video。 我想要的是,如果我想要显示图像,那么该项目只能获取图像,如果我想显示video,则reyclerView项目仅获取video而不重复。 喜欢Instagram 。 我搜索了很多论坛,但没有得到任何帮助。 请帮忙。 我使用Firebase作为我的数据库,ViewHolders就是根据这个。 图片和videopost的类文件: FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter( post.class, R.layout.post_row_recycle_home, postViewHolder.class, mDatabaseReference ) { @Override protected void populateViewHolder(postViewHolder viewHolder, post model, int position) { viewHolder.setimage(getApplicationContext(), model.getImage()); viewHolder.setYoutube(model.getYoutube()); } }; mrecyclerView.setAdapter(firebaseRecyclerAdapter); 持有人: public static class postViewHolder extends RecyclerViewPager.ViewHolder{ View mView; public postViewHolder(View itemView) { super(itemView); […]

Android:如何在位置(从适配器外部)访问viewholder

我有一个Recycler视图适配器。 所以它拥有3个视图。 只需每个视图都有ImageView。 当用户点击图像时(3个中的1个)它创建了使用照片应用程序的新意图,并在完成后将其返回给调用者。 调用者(创建RecyclerView及其适配器的activity)处理onActivityResult。 从那里我需要将所提到的意图中的缩略图设置为相应的选定ImageView。 题。 在我的Activity中,我如何知道要修改哪个imageView(可用3个)? 我的活动只知道回收器视图适配器中的哪个项目被点击的位置。 是否有可能通过仅使用位置以某种方式获得对适配器中特定imageView的引用? 所以像这样:来自activity: adapter.getImageView(position) 编辑:所以我的解决方案是:我正在跟踪适配器中的所有ImageViews并将它们的ref存储在`onBindViewHolder中的ArrayList中。 所以现在我可以使用adapter.getImageView(position)

带有Scrapped或附加视图的GapWorker可能无法回收。 isScrap:false isAttached:true

当我滚动我的recyclerview太快时,我得到了以下崩溃 java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false isAttached:true at android.support.v7.widget.RecyclerView$Recycler.recycleViewHolderInternal(RecyclerView.java:5659) at android.support.v7.widget.RecyclerView$Recycler.recycleView(RecyclerView.java:5603) at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:277) at android.support.v7.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:324) at android.support.v7.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:337) at android.support.v7.widget.GapWorker.prefetch(GapWorker.java:344) at android.support.v7.widget.GapWorker.run(GapWorker.java:370) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 我已经尝试了我的所有努力,并在stackoverflow上得到了类似的问题,但没有一个像下面的链接一样有用, 链接1 链接2 链接3 链接4 链接5 我不知道它发生在哪里的崩溃。 任何帮助将不胜感激。 我既不使用“android:animateLayoutChanges =”true“ 基本上我曾尝试合并这两个不同的GitHub项目, RV-适配器状态 RV-适配器不已 我的文件链接如下,来自pastbin, […]

OnMapLoadedCallback和OnMapReadyCallback,何时使用哪个?

在使用GoogleMap Lite的ViewHolder时,作为RecyclerView中行的一部分,我正在寻找回调来在Map准备就绪时设置引脚位置。 我发现下面的两个function。 OnMapLoadedCallback: https : //developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback?hl = en OnMapReadyCallback: https : //developers.google.com/android/reference/com/google/android/gms/maps/OnMapReadyCallback 两者都certificate有效和可用(如下所示)。 因此,我很困惑,如果他们确实有任何特定的不同行为,应该在不同的场合使用,或者他们确实相似,可以互换使用? 使用OnMapLoadedCallback: LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (Marker marker : markers) { builder.include(marker.getPosition()); } final CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(builder.build(), 0); googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { @Override public void onMapLoaded() { googleMap.moveCamera(cameraUpdate); } }); 使用OnMapReadyCallback: LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (Marker marker […]

在片段之间切换后,RecyclerView项目消失

我的应用程序中有4个片段,它们在NavActivity中管理: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nav); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager); fab = (FloatingActionButton) findViewById(R.id.fab); // Fab for fragments viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { switch (state) […]

使用ViewHolder的Android列表视图

我有个问题。 点击后我试图在列表视图中更改图标。 它可以正常工作,虽然不会仅修改单击的图标,但也不会修改那些未显示的图标。 例如,如果我单击列表视图的第一项中的图标,则第五个图标也会更改。 对于以下所有项目(列表视图的每五个项目)重复此行为。 这是我的getView方法: public class AlphabeticalAdapter extends ArrayAdapter { int layoutResourceId; private final Context context; private List data; private ProgressDialog mProgressDialog; private ImageView downloadImageButton; public AlphabeticalAdapter(Context context, int resource, List data){ super(context, resource, data); this.layoutResourceId = resource; this.context = context; this.data = data; } public View getView(int position, View convertView, ViewGroup parent) […]

为什么EditText中的输入值在RecyclerView中滚动时交换其位置?

在EditText中输入输入后,如果向上或向下滚动非常快,则输入值会在RecyclerView中的另一个EditText中交换其位置。 在滚动之前,数据位于第一个EditText中。 在向上和向下滚动之后,第一个EditText的值将其位置更改为第4个,并且交换是随机的。 是否有任何工作来稳定数据。 这是一个示例截图 这是模型类: public class Product { public int pId; public String pName; public double unit_price; public double discount; } 这是适配器类: public class ProductAdapter extends RecyclerView.Adapter { Context context; List productList; public ProductAdapter(Context c, List lp){ this.context = c; this.productList = lp; } public class ProductListHolder extends RecyclerView.ViewHolder{ TextView tvName; TextView tvPrice; […]

viewholder是否应该引用适配器?

我正在阅读Google的示例代码,代码如下: public class AttractionListFragment extends Fragment { … private class AttractionAdapter extends RecyclerView.Adapter implements ItemClickListener { public List mAttractionList; private Context mContext; public AttractionAdapter(Context context, List attractions) { super(); mContext = context; mAttractionList = attractions; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Log.d(“TEST”, “onCreateViewHolder”); LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.list_row, parent, […]