标签: recycler-adapter

RecyclerView onItemClick Listener

如何像ListView一样实现RecyclerView onItemClick监听器,这是我的旧适配器类使用ListView:

public class GenreAdapter extends BaseAdapter {

....

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // convert view = design
    View v = convertView;
    if (v == null) {
        holder = new ViewHolder();
        v = vi.inflate(Resource, null);
        holder.textTitle = (TextView) v.findViewById(R.id.textTitle);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }

    holder.textTitle.setText(genreArrayList.get(position).getTitle());

    v.setOnClickListener(new OnClickListener() {

       @Override
       public void onClick(View v) {                          

           Bundle bundle = new Bundle();
           bundle.putSerializable("data", genreArrayList);
           bundle.putInt("current", position);             

           Intent intent …
Run Code Online (Sandbox Code Playgroud)

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

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

如何覆盖RecyclerView Adapter的notifyDataSetChanged,notifyItemChanged ...方法

作为标题.我正在编写一个支持多选模式的自定义RecyclerView.我需要跟踪每个项目的选定/未选择状态.因此,在RecyclerView的数据大小发生变化之后.我想更新跟踪状态列表的大小.但我不知道在哪里重写方法:notifyDataSetChanged,notifyItemChagned ....

android recycler-adapter android-recyclerview

5
推荐指数
3
解决办法
5469
查看次数

如何重用RecyclerView对象,适配器和视图持有者

我有一系列,曾经被称为listViews,在我的应用程序中,现在是RecyclerViews.我很好奇提高模块性和减少我的应用程序的这一部分的重复的最有效的方法.

例如,我有GroupMemberFragmentFriendFragment,几乎相同RecyclerView.ViewHoldersRecyclerView.Adapters

重构的最佳方法是什么,以减少代码重复,但仍然允许每个相应的项目列表对其数据是唯一的,并且足够灵活,以便将来添加更多数据?

GroupMemberFragment:

public class GroupMemberFragment extends Fragment {

    RecyclerView mRecyclerView;
    ArrayList<Group> mGRoups;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.recycler_layout, container, false);

        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view_layout);
        mRecyclerView.setHasFixedSize(true);

        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        // Only things that need to change across all the list classes....
        mGRoups = GroupListProvider.getInstance(getActivity()).getGroups();
        mRecyclerView.setAdapter(new GroupAdapter(mGRoups));

        return view;
    }


    // inner Class

    private class GroupViewHolder …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder recycler-adapter android-recyclerview

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

在我的recyclerview适配器类中实现Android底表

我想在Recyclerview Adapter类的Onlongclick中实现android底层表,但是试图长按我的recyclerview项,使其崩溃。

     public class AddAtendanceAdapter extends      
        RecyclerView.Adapter<AddAtendanceAdapter.AttendanceViewHolder> {
        public List<Details> dAttendance = Collections.emptyList();

        private LayoutInflater inflater;
        private static Context context;

        private View v;




        public AddAtendanceAdapter(Context context, List<Details> dAttendance) {
            this.dAttendance = dAttendance;
            this.context = context;
            inflater = LayoutInflater.from(context);
        }

        @Override
        public AttendanceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.student_item_row,
    parent, false);
            AttendanceViewHolder pvh = new AttendanceViewHolder(v);
            return pvh;
        }

        @Override
        public void onBindViewHolder(AttendanceViewHolder holder, int postions) {
            Details details = dAttendance.get(postions);
            holder.StudentsName.setText(details.getStudentName());
            Glide.with(context)
                    .load(details.getStudentImage())
                    .into(holder.stdImg);

        }

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

android material-design recycler-adapter android-recyclerview

5
推荐指数
2
解决办法
7326
查看次数

RealmSearchAdapter不重新显示视图

我有一个gridview项目,我可以增加或减少其值,发生的是当我更改项目的值并向下滚动屏幕并向后滚动我所做的更改已经消失,如果我向下滚动几次,我可以看到我再次做出的改变,我在这里失踪了什么?

public class SearchItemViewAdapter extends RealmSearchAdapter<Itens, SearchItemViewAdapter.ViewHolder> implements RealmChangeListener {

    public SparseBooleanArray mSparseBooleanArray;

    public SearchItemViewAdapter(Activity context, Realm realm, String filterColumnName) {
        super(context, realm, filterColumnName);
        mSparseBooleanArray = new SparseBooleanArray();

    }

    @Override
    public void onChange() {
        notifyDataSetChanged();
    }

    public RealmList<Itens> getCheckedItems() {
        RealmList<Itens> mTempArry = new RealmList<>();

        for (int i = 0; i < realmResults.size(); i++) {
            if (mSparseBooleanArray.get(i)) {
                mTempArry.add(realmResults.get(i));
            }
        }


        return mTempArry;
    }


    public class ViewHolder extends RealmSearchViewHolder {

        public SearchItemView itemView;

        public ViewHolder(FrameLayout container, TextView footerTextView) {
            super(container, …
Run Code Online (Sandbox Code Playgroud)

android realm android-adapter recycler-adapter android-recyclerview

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

如何强制RecyclerView.Adapter在所有元素上调用onBindViewHolder()

我有一个VerticalGridView正在使用RecyclerView.Adapter填充元素。我发现onBindViewHolder()如果潜在元素不在视口中,则不会调用该方法。不幸的是,这是NullPointerException由另一种方法引起的,因为我TextView在该onBindViewHolder()方法中捕获了一个引用并将其传递给外部变量以供以后操作。

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    final ViewHolder viewHolder = (ViewHolder) holder;
    viewHolder.txtCategoryName.setText(categories.get(position).getStrCategory());
    categories.get(position).setTxtViewReference(viewHolder.txtCategoryDefectTotal);
    viewHolder.categoryBoxRoot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(CategoryListItem catItem : categories){
                if(catItem.getStrCategory().equals(viewHolder.txtCategoryName.getText())){
                    int index = Defects.getInstance().getCategories().indexOf(catItem) + 1;
                    MainInterface.grids.get(index).bringToFront();
                    MainInterface.grids.get(index).setVisibility(View.VISIBLE);
                    for(VerticalGridView grid : MainInterface.grids){
                        int gridIndex = MainInterface.grids.indexOf(grid);
                        if(gridIndex != index){
                            grid.setVisibility(View.INVISIBLE);
                        }
                    }
                    break;
                }
            }

        }
    });
Run Code Online (Sandbox Code Playgroud)

据我了解,实例化对象TextView时会创建对gets 的引用Viewholder

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

android textview recycler-adapter android-recyclerview

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

无法在SearchView中实现过滤器.(SearchView + FirebaseRecyclerAdapter)

我正在使用Firebase-UI的FirebaseRecyclerAdapter.我无法在SearchView中实现过滤器.

我的数据库:

在此输入图像描述

我的问题:

如何使用FirebaseRecyclerAdapter按字符搜索FirebaseDatabase?
(我想按用户名搜索)

我的代码:我用这种方法进行搜索,我的代码有什么问题?

 mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            Query Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt("~");

            FirebaseRecyclerAdapter<User, SearchFeedFragment.AllRegisterUserViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<User, SearchFeedFragment.AllRegisterUserViewHolder>(
                    User.class, R.layout.row_search_all_users, SearchFeedFragment.AllRegisterUserViewHolder.class, Q) {
                @Override
                protected void populateViewHolder( SearchFeedFragment.AllRegisterUserViewHolder viewHolder,User model, int position) {


                    viewHolder.setUserName(model.getUsername());
                    viewHolder.setUserProfilePic(Common.stringToBitMap(model.getProfilepicurl()));

                }
            };
            mRecyclerViewSearch.setAdapter(firebaseRecyclerAdapter);
            return false;
        }
    });


public static class AllRegisterUserViewHolder extends RecyclerView.ViewHolder {

        View mView;

        ImageView mImgProfileImage = (ImageView) itemView.findViewById(R.id.iv_searchProfilePic);
        TextView mTxtProfileName = (TextView) itemView.findViewById(R.id.txt_searchProfileName);

        public …
Run Code Online (Sandbox Code Playgroud)

firebase searchview recycler-adapter android-recyclerview firebase-realtime-database

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

在recyclerview中滚动到特定类别位置

我想在加载recyclerview之后滚动到项目ID == 5,我直接设置项目ID setTargetPosition....如果有任何人有更好的线索,请帮助我.根据响应我想在加载recyclerview后直接滚动到三明治类别....

这是我的setAdapter代码;

                try {
                JSONArray jsonArray = arrayList.get(0);
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jObj = jsonArray.getJSONObject(i);
                    String catName = jObj.getString("CategoryName");
                    String catId = jObj.getString("CategoryID");
                    Category cat1 = createCategory(catName, Integer.parseInt(catId));
                    JSONArray jProductDetails = jObj.getJSONArray("ProductDetails");
                    ArrayList<HashMap<String, String>> productdetaildata = new ArrayList<HashMap<String, String>>();
                    for (int j = 0; j < jProductDetails.length(); j++) {
                        JSONObject jP = jProductDetails.getJSONObject(j);
                        HashMap<String, String> map = new HashMap<String, String>();
                        map.put(HitUtilities.product_id, jP.getString("ProductID"));
                        map.put(HitUtilities.product_name, jP.getString("ProductName"));
                        map.put(HitUtilities.product_image, jP.getString("PhotoImagePath"));
                        map.put(HitUtilities.product_price, jP.getString("CurrentPrice"));
                        map.put(HitUtilities.product_isFavorite, …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

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

DiffUtil违反areContentTheSame的合同

最近,我在我的应用程序中发现了奇怪的崩溃。我发现它们是由ListAdapter-> DiffUtil下方引起的。合同规定,areContentsTheSame只有在对应项目areItemsTheSame返回true时,才会调用回调。问题是,areContentsTheSame被称为该项目areItemsTheSame从未被调用。

我正在对String产品进行测试,因此它不应与自己的回收器实施相关。如果是我的错(现在几乎没有逻辑)或DiffUtil工具中的错误,我真的很困惑

我已经创建了一个简单的仪器化测试,但在上述情况下失败了-更有经验的人可以看看一下:

package com.example.diffutilbug

import android.util.Log
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import junit.framework.Assert.assertTrue
import kotlinx.coroutines.*
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.BlockJUnit4ClassRunner

@RunWith(BlockJUnit4ClassRunner::class)
internal class ExampleUnitTest {

    @Test
    fun testDiffUtil4() {

        val handler = CoroutineExceptionHandler { _, exception ->
            throw exception
        }
        // adapter compare items :
        // areItemsTheSame -> compare length of String
        // areContentsTheSame -> …
Run Code Online (Sandbox Code Playgroud)

android listadapter android-support-library recycler-adapter androidx

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

显示每个RecyclerView项目后如何检测

我想在显示给用户后在RecylerView中检测每个项目。

基本上,我试图在每个项目加载到屏幕上后播放声音。

But I am not able to detect whenever each item is loaded on the screen! Is there any method I have to call to detect each item rendered

E.g 1st RecyclerView item displayed -> play sound
    2st RecyclerView item displayed -> play sound...
Run Code Online (Sandbox Code Playgroud)

My Adapter class looks like this -

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

    private List<Multiples> items = new ArrayList<>();

    private Context ctx;
    private OnItemClickListener mOnItemClickListener;
    private int animation_type = 0;
    .........
    .........
Run Code Online (Sandbox Code Playgroud)

I …

java android android-viewholder recycler-adapter android-recyclerview

5
推荐指数
2
解决办法
3931
查看次数