标签: android-recyclerview

将recyclerview项目限制为仅10,而不使用过滤器进行分页

我正在使用带有普通TextView的283项的Recycler View来过滤列表.

我想一直只显示10条记录.

我不能使用getCount(或GetItemCount)因为当我过滤列表它给我IndexOutOfBoundsExceptions时,有没有其他方法可以做到这一点?

public class RealmAutoCompleteAdapter extends RecyclerView.Adapter<RealmAutoCompleteAdapter.ProductViewHolder>  {
Realm realm;

RealmChangeListener<RealmResults<FieldsItem>> realmChangeListener;
RealmResults<FieldsItem> items;
String searchTerm;

public RealmAutoCompleteAdapter(Realm realm, RealmResults<FieldsItem> items) {
    this.realm = realm;
    this.realmChangeListener = new RealmChangeListener<RealmResults<FieldsItem>>() {
        @Override
        public void onChange(RealmResults<FieldsItem> results) {
            notifyDataSetChanged();
        }
    };
    this.items = items;
    items.addChangeListener(realmChangeListener);
}

@Override
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new ProductViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.autocomplete_row, parent, false));
}

@Override
public void onBindViewHolder(ProductViewHolder holder, int position) {
    FieldsItem item = items.get(position);
    holder.title.setText(item.getTitle());
}

public void updateInput(String input) {
    this.searchTerm …
Run Code Online (Sandbox Code Playgroud)

android realm android-recyclerview

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

在RecyclerView中禁用ItemTouchHelper滑动某些行

我只是使用以下方法在“数据”列表上进行左右滑动,所以效果很好。并且我想知道如何对数据列表中的某些行禁用滑动操作。例如:有些数据用户不应删除。我想限制那些行。

ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {


        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

            //Remove swiped item from the list and notify the RecyclerView

        }
        @Override
        public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {

        }
    };
Run Code Online (Sandbox Code Playgroud)

java android android-recyclerview

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

Recycler View的程序流程

我正在使用回收站视图实现导航栏,通过参考网站上提供的代码:http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html

在MainActivity.java中,调用以下行.

mAdapter = new MyAdapter(TITLES,ICONS,NAME,EMAIL,PROFILE);

mRecyclerView.setAdapter(mAdapter); 

mLayoutManager = new LinearLayoutManager(this);          

mRecyclerView.setLayoutManager(mLayoutManager);
Run Code Online (Sandbox Code Playgroud)

我想知道在MyAdapter.java中以什么顺序调用哪些函数?这是MyAdapter.java的代码

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;


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

    private static final int TYPE_HEADER = 0;  // Declaring Variable to Understand which View is being worked on
    // IF the view under inflation and population is header or Item
    private static final int TYPE_ITEM = 1;

    private String mNavTitles[]; // String Array to store the …
Run Code Online (Sandbox Code Playgroud)

java android recycler-adapter android-recyclerview

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

RecyclerView Onclick(调用非静态方法)

我遇到了一个关于将OnItemClickListener设置为我的RecyclerView项目的问题.我尝试按照Android Studio的RecyclerView示例中描述的方式设置监听器.因此,在我的RecyclerView的ViewHolder类中设置了一个监听器.

public class ProgramViewHolder extends RecyclerView.ViewHolder {
    protected TextView vName;
    protected ImageView vProgramImage;

    public ProgramViewHolder(View v) {
        super(v);
        vName = (TextView) v.findViewById(R.id.programName);
        vProgramImage = (ImageView) v.findViewById(R.id.programImage);

        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // HERE PROBLEM !! 
                MainActivity.openSettings(1);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想调用我的MainActivity openSettings(int)的方法来加载片段:

public void openSettings(int layoutId) {
    settingsFragment setFrag = new settingsFragment();

    Bundle information = new Bundle();
    information.putInt("layoutId", layoutId);

    setFrag.setArguments(information);
    getFragmentManager().beginTransaction()
            .replace(R.id.fragmentContainer, setFrag)
            .commit();
}
Run Code Online (Sandbox Code Playgroud)

但现在问题.当我尝试编译时,它说"非静态方法'openSettings(int)'不能从静态上下文中引用." 我完全不明白这个错误.为什么它是一个静态的上下文?ProgramViewHolder类不会声明为static.

最重要的部分:我该如何解决?我想为RecyclerView的每个项目设置一个OnClickListener,并调用MainActivity的公共方法.

非常感谢你,花时间来帮助我.

java static android onclick android-recyclerview

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

如何在RecyclerView中获取CardView的宽度

所以这是我的RecyclerView的xml

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/bikename_recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

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

这是由RecyclerView的适配器充气的布局.

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

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/bikenames_cardview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:orientation="vertical" >

            <ImageView
                android:id="@+id/bikenames_imageview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/bikenames_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    </android.support.v7.widget.CardView>

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

所以在这里我需要在我的Activity或RecyclerView适配器中找到CardView(@ id/bikenames_cardview)的宽度.我也写了RecyclerView适配器.

适配器代码

public class BikeNamesAdapter extends RecyclerView.Adapter<BikeNamesViewHolder> {

    BikeNames bikeNames;
    Context context;

    public BikeNamesAdapter(BikeNames bikeNames) {
        this.bikeNames = bikeNames;
    }

    @Override
    public int getItemCount() {
        return bikeNames.getLength();
    }

    @Override
    public BikeNamesViewHolder onCreateViewHolder(ViewGroup …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-recyclerview

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

如何使用listview实现具有异构行类型(图像视频和文本)的聊天列表视图?

我正在构建一个正常的聊天应用程序.可以发送图像,文本和视频,因此我的列表中需要多种行样式.我使用listview.但是Listview多次返回(在回收行之后)错误的行并且我的尝试失败了.任何想法怎么做?可以使用RecyclerView完成吗?谢谢.

android chat android-listview android-recyclerview

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

将arraylist保存为SharedPreferences

当我的应用程序关闭并重新打开时,我有一个包含许多元素的recyclelerview,我希望使用SharedPreferences保存这些元素.我的数组的代码如下.

public ArrayList<MyInformation> getDataSet() {
        ArrayList results = new ArrayList<MyInformation>();    
        return results;
    }
Run Code Online (Sandbox Code Playgroud)

(我在myAdapter中将内容添加到recyclerview中)

public void addEntity(int i, MyInformation entity) {
        information.add(i, entity);
        notifyItemInserted(i);
    }
Run Code Online (Sandbox Code Playgroud)

那么,当我关闭应用程序时,如何保存此数组呢?谢谢!

android sharedpreferences android-recyclerview

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

方法getItemCount中的空指针异常

我正在使用带卡片视图和recyclerview的列表.我为列表添加了适配器并添加了getItemCount方法.我想为我的列表添加搜索功能.所以我也添加了一个过滤器.但是当我在搜索视图中输入时,我在返回ItemList.size()时遇到异常; 这条线..我错过了什么?

适配器

public class ItemAdapter  extends RecyclerView.Adapter<ListViewHolder> implements Filterable{

    public ItemsFilter itemFilter;
    ArrayList<Item> mStringFilterList;
    private ArrayList<Item> ItemList;
    private Context context;
    private MyItemClickListener mItemClickListener;
    private MyItemLongClickListener mItemLongClickListener;

        public ItemAdapter(Context context,ArrayList<Item> ItemList) {
           this.context= context;
            this.ItemList = ItemList;

        }

        @Override
        public ListViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_layout, null);
            ListViewHolder mh = new ListViewHolder(v);

            return mh;
        }

        @Override
        public void onBindViewHolder(final ListViewHolder ListViewHolder, int i) {
            Item Item = ItemList.get(i);
            ListViewHolder.textName.setText(Item.getItem_name());
            ListViewHolder.textDesc.setText(Item.getItem_desc());
            ListViewHolder.textQty.setText(Item.getItem_qty());
            ListViewHolder.textName.setOnClickListener(new View.OnClickListener() {
                @Override
                public …
Run Code Online (Sandbox Code Playgroud)

java android filter android-recyclerview

0
推荐指数
2
解决办法
5713
查看次数

使用ItemTouchHelper.Callback实现"Bounce Back"RecyclerView动画

我正在尝试RecyclerView使用Helper扩展的类在我的行中创建动画ItemTouchHelper.Callback.

默认的"滑动"行为ItemTouchHelper是,如果以足够的速度滑动一行,它将从视图中消失(即,滑动到dimiss).在我的情况下,我想创建一个动画,如果发生这样的事件,导致行直接反弹.

我已经能够创建一个ValueAnimator动画,如果它在屏幕上滑动,将该行动画回视图.但是,问题在于我无法让父ItemTouchHelper类识别x它存储的值已从行的宽度(因此它完全在屏幕外)更改为0(以便它返回到屏幕上).

这意味着每当我在完成自定义动画后与行进行交互时,它就像行仍然在屏幕外,即使它完全可见.这通常意味着按下它意味着行从一个X位置跳到行宽0X位置,因此再次从屏幕边缘重新生成动画.在完全重置并再次正常运行之前,它会执行此操作几次.

该视频将有助于显示问题.由于前两次滑动不在屏幕外,因此默认行为有效.然后将行从屏幕上滑下并反弹回来,点击该行会显示它从右边缘向后ping:

Youtube  -  ItemTouchHelper.Callback问题

这是我用来进行动画的代码:

public class CustomItemTouchHelper extends ItemTouchHelper.Callback {

    private RecoverAnimation ra;
    private boolean animatorRunning;

//...

    @Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        final float per = (dX/viewHolder.itemView.getWidth());
        if (per > 0.8F && !animatorRunning && !isCurrentlyActive) {
            ra = new RecoverAnimation(c, recyclerView, viewHolder, ItemTouchHelper.ANIMATION_TYPE_SWIPE_CANCEL, …
Run Code Online (Sandbox Code Playgroud)

android android-animation android-recyclerview

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

在RecyclerView中更改每三张卡的颜色

我已经实现了CardView使用代码RecyclerView.我的清单有15个项目,现在我想更改CardView列表中的每个奇怪的背景颜色.请为我提供正确的代码CardView.我尝试过简单的奇数偶数代码.这是代码:

在onBindViewHolder方法中:

@Override
public void onBindViewHolder(final DataHolder holder, int position) {
    holder.tv1.setText(result[position]);
    imageLoader.displayImage("drawable://" + imgs[position], holder.iv1, options);

    for(int i =0; i <= imgs.length;i+=2)
    {
        holder.cv1.setCardBackgroundColor(R.color.colorAccent);
    }
}
Run Code Online (Sandbox Code Playgroud)

background-color android-cardview android-recyclerview

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