标签: recycler-adapter

将图像从drawable设置为recyclerview

我想在底部导航片段中实现RecyclerView,其中包含带有TextView和ImageView的CardView.我在每张打开新活动的卡上都有一个onClickListener.但我的recyclerview没有显示任何东西,并给出了null点异常Logcat.我不知道我在这里缺少什么.

模型类

   class Data {

public int imageId;
public String txt;

Data( int imageId, String text) {

    this.imageId = imageId;
    this.txt = text;
}
}
Run Code Online (Sandbox Code Playgroud)

RecyclerView适配器

    public class RecyclerViewAdapter  extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
List<Data> data ;
Context context;

public RecyclerViewAdapter(Context context, ArrayList<Data>data) {
    this.context = context;
    this.data = data;
}

    public static class MyViewHolder extends RecyclerView.ViewHolder{

        public CardView mCardView;
        public TextView mTextView;
        public ImageView imageView;

        public MyViewHolder(View v){
            super(v);

            mCardView = (CardView) v.findViewById(R.id.cardview1);
            mTextView = (TextView) v.findViewById(R.id.tv_text);
            imageView = …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

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

RecyclerView适配器getItemViewType方法有时返回2,8等等而不是0或1

以下是我使用的代码:

public class PaymentAndReceiptAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int TYPE_HEADER = 0;
    private static final int TYPE_ITEM = 1;

    public Context context;
    private List<CustomerAndAmount> customerAndAmountList = new ArrayList<>();
    private PaymentAndReceiptItemClickListener paymentAndReceiptItemClickListener;
    private Map<Long, Double> chartMap;

    public PaymentAndReceiptAdapter(final Context context, final List<CustomerAndAmount> customerAndAmountList, final Map<Long, Double> chartMap, final PaymentAndReceiptItemClickListener paymentAndReceiptItemClickListener) {
        this.context = context;
        setResult(customerAndAmountList, chartMap);
        this.paymentAndReceiptItemClickListener = paymentAndReceiptItemClickListener;
    }

    public void setResult(final List<CustomerAndAmount> customerAndAmountList, final Map<Long, Double> chartMap) {
        this.customerAndAmountList.clear();
        if (null != customerAndAmountList) {
            this.customerAndAmountList.addAll(customerAndAmountList);
        }
        this.chartMap …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview recyclerview-layout

5
推荐指数
0
解决办法
367
查看次数

Android:RecyclerView.Adapter无法正常工作

我的问题id直接与@Richard有关,在RecyclerView.Adapter中关于onBindViewHolder()方法的问题没有被调用,因为他(和我)期望它这样做.

我注意到这个方法被正确调用,直到我的数据集结束(9个CardViews,向下滚动),但是当我尝试返回(向上滚动)时,它不再被调用.真正的问题是,在那里我在数据集中进行了更改并调用了notifyDataSetChanged(),但是由于这种奇怪的(对我来说)行为,我的修改不应该发生.

我附上的图片想要澄清:

  • 我到达Rec.View的底部(cardView - 仰望:一切都很好);
  • 处理卡片已经完全或部分显示没有问题(仰卧,Gerund和Participle);
  • 但是当我到达第一个完全被遮挡的cardView时,onBindViewHolder()不再被调用了,我可以从调试中看到链接到适配器的数据集是"Supine",并且这里是:显示了Supine cardView.

从RecyclerView的底部向上滚动 - 对不起质量问题

我认为这是理查德在他的问题中遇到的完全相同的问题,我尝试了他完全相同的解决方案:我在我的Adapter的构造函数中强制setHasStableIds()为true,

public CardAdapter(List<Object> items){
    this.items = items;
    adapterList = new ArrayList<String>();
    formAdapt = new ConjFormAdapter(adapterList);
    itemMap = new HashMap<Object, Long>();
    setHasStableIds(true);
}
Run Code Online (Sandbox Code Playgroud)

其中itemMap是我在我的活动中实现的Map,用于设置我的数据集的唯一ID,

并以这种方式覆盖getItemId():

public long getItemId(int position) {
    Object item = items.get(position);
    return itemMap.get(item);
}
Run Code Online (Sandbox Code Playgroud)

但是你可以从图片中看到我仍然得到这个结果:好吗?

编辑

我的活动中itemMap的实现:

for(int i=0, j=0; i<conj_items.size(); i++, j++)
            conjAdapter.getItemMap().put(conj_items.get(i), (long) j);
Run Code Online (Sandbox Code Playgroud)

其中conj_items是我传递给适配器的ArrayList.

android android-viewholder android-cardview recycler-adapter android-recyclerview

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

RecyclerView面临小问题

RecyclerView在我的程序中使用,面对一些小问题,我相信你们中的一些人已经面对并解决了所有这些问题.

  1. Separator color:使用DividerItemDecoration.java显示Items之间的分隔符,但如果我想更改分隔线颜色(如:默认为白色),则不知道在哪里进行更改

  2. Clickable Row:点击仅在我连续点击文本时有效,但我想允许用户点击链接后的任何地方(如:listview)

  3. Wrap RecyclerView :我在recyclerview中只有两个记录,但它消耗全高(我想根据RecyclerView中的记录包装它,如:listview)

  4. Ripple Effect:每当我点击RecyclerView中的任何项目时都没有获得RippleEffect,而当我点击列表项目获得Ripple效果时

  5. RecyclerView Item Animation:当我点击RecyclerView中的任何项目时,如何实现动画效果

fragment_main.xml: -

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_rounded"/>
Run Code Online (Sandbox Code Playgroud)

adapter_main.xml: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textTitle"
        style="@style/AppTheme.ListTextView"
        />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

styles.xml: -

<style name="AppTheme.ListTextView" parent="android:Widget.Material.TextView">
        <item name="android:gravity">left</item>
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>            
        <item name="android:padding">10dp</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

btn_rounded.xml: -

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#008f8471"/>
    <stroke android:width="2dp" android:color="#ffffff" />
    <corners android:radius="10dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

MainAdatper.java:-

@Override
public …
Run Code Online (Sandbox Code Playgroud)

android android-5.0-lollipop recycler-adapter android-recyclerview

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

如何知道RecyclerView中的最后一项

在我RecyclerViewAdapter,我想知道这个项目是否是最后一个.我怎么检查呢?

onBindViewHolder只有位置值

@Override
public void onBindViewHolder(UserViewHolder userViewHolder, int position) {

       //DO SOMETHING TO THE VIEW IF THIS IS THE LAST ITEM IN RECYCLERVIEW
}
Run Code Online (Sandbox Code Playgroud)

android android-layout recycler-adapter android-recyclerview recyclerview-layout

4
推荐指数
2
解决办法
9738
查看次数

如何在其适配器的onBindViewHolder中更新recyclerView?

我在recyclerView中列出了卡片清单。持卡一段时间后,其在数据库中的对应条目将被删除,因此之后必须将其删除。可以通过调用设置新的更新的适配器来完成。但是我无法在onBindViewHolder中使用setAdapter函数,因为我不知道如何获得相同的recyclerView。请帮忙。

码:

public class RecyclerViewAdapterMain extends RecyclerView.Adapter<RecyclerViewAdapterMain.ViewHolder> {

String[] strings;
DBManager dbManager;

public RecyclerViewAdapterMain(String[] arrayList) {
    this.strings = arrayList;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_list,parent,false);
    ViewHolder viewHolder = new ViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    holder.textView.setText(strings[position]);
    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(holder.itemView.getContext(),SecondActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("list",strings[position]);
            intent.putExtras(bundle);
            holder.itemView.getContext().startActivity(intent);
            //overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);
        }
    });
    holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

4
推荐指数
2
解决办法
8985
查看次数

如何在默认情况下突出显示RecyclerView的第一行,然后在选择其他行时删除突出显示?

我正在尝试加载列表RecyclerView并将列表的第一行显示为已选中.我使用以下代码实现了它:

@Override
public void onBindViewHolder(NavigationDrawerAdapter.ViewHolder holder, final int position) {

    if (!mNavClassrooms.get(position).equals("")) {
            holder.mTextViewClassroom.setText(mNavClassrooms.get(position)); // Setting the Text with the array of our Titles
            holder.mRelLayClassroom.setSelected(mSelectedItems.get(position, false));

            /*
            The following code was written to make the first item in the Classroom list as selected.
            It leads to the item always being selected and hence has been commented out.
             */
            if(position == 0 && intOldSelectedItem == -1){
                holder.mRelLayClassroom.setSelected(mSelectedItems.get(position, true));
                intOldSelectedItem = 0;
                mSelectedView = holder.mRelLayClassroom.getChildAt(position);
                mSelectedItems.put(position, true);
            }
            else{
                holder.mRelLayClassroom.setSelected(mSelectedItems.get(position, …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

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

如何保存RecyclerView行项的状态?

我有一个recyclerview,它从SQL数据库中填充数据.现在,recyclerview中的每一行都有一个搜索栏,当移动时,它会在同一行内的文本视图中显示它的进度.问题是当我向上或向下滚动recyclerview然后返回到第一个更改的行时,搜索栏返回到其默认位置.如何保存新职位?在正常的活动/片段中,我使用生命周期方法作为"onPause"来保存/恢复状态.在这里我们有onAttachedToRecyclerView,我认为它应该解决我的问题,但我不确切知道如何.

编辑:这是一个完整的简单的应用程序文件,我正在努力测试这个问题.

MainActivity.class

public class MainActivity extends AppCompatActivity {
    private List<Score> scoreList = new ArrayList<>();
    private RecyclerView recyclerView;
    private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

    mAdapter = new MyAdapter(scoreList);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(mAdapter);

    prepareScoreData();
}

private void prepareScoreData() {
    Score score = new Score("title", 5);
    scoreList.add(score);

    for(int i= 0; i<1000; i++){
        score = new Score("title", 5);
        scoreList.add(score);
    }

    mAdapter.notifyDataSetChanged();
}
}
Run Code Online (Sandbox Code Playgroud)

MyAdapter

public class MyAdapter extends …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

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

什么是RecylerView适配器负责?选择以下每个真实语句:

  1. 为每个RecylerView项创建一个ViewHolder对象.
  2. 缓存与每个项目关联的视图.
  3. 返回数据源中的项目数.
  4. 将数据从数据源绑定到每个项目.
  5. 回收物品,以便它们可以再次使用.
  6. 为每个将要显示的项目视图充气.

这是udacity的问题,我无法回答.根据我的学习,这是1,4,5,6,但这是错的.实际问题在这里你可以试试.

android recycler-adapter android-recyclerview

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

再次插入数据时,Recyclerview会自动向上滚动

我遇到了一个问题,当我将数据添加到数组列表然后将其添加到适配器之后,当我将其设置为recycleler视图适配器时,它会自动跳转到顶部我如何能够阻止它,就像我想在虚拟空间中添加数据一样我也尝试过使用 -

runOnUiThread(new Runnable() {
                                public void run() {
                                    innerAdapter.notifyDataSetChanged();
                                }
                            });
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我怎么解决呢?

添加一些代码以便向上滚动

if (isScrollUp) {
                            isEnable = true;
                            userChats.addAll(0, model.data);
                                                       innerChatAdapter.notifyDataSetChanged();
                            new Handler().postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    nnerChatAdapter.notifyItemInserted(0);
                                    recyclerView.smoothScrollToPosition(0);
                                }
                            }, 1);
                        }
Run Code Online (Sandbox Code Playgroud)

android arraylist recycler-adapter android-recyclerview

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