标签: recycler-adapter

Recycler View模糊和重复问题

我的应用程序包含一个包含工具栏(app-bar),ad-mob和fragment.thr frament的活动,其中包含一个RecyclerView.

我只是在其适配器中使用基本的RecylerView方法进行充气和onbindview .....等,我使用的是Linear-Layout Inflater.

它在大多数情况下工作正常,但有时(比如50次中的1次)它在屏幕的顶部和底部模糊并重复视图,包括ToolBar(App-Bar)和导航栏以及recyler视图的一些部分和LogCat中没有错误.

模糊区域不恒定有时它会模糊大部分屏幕,有时只有部分屏幕模糊

这是屏幕截图: - 参考我还包括适配器位置

ScreenShot: - 错误1 ScreenShot: - 错误1

ScreenShot: - 错误2 ScreenShot: - 错误2

我试图消除模糊,是解决了Probelm?

Update-1我尝试使用setHasSizeFixed(true),因为适配器数据不会改变我的视图大小都是90dp高度.没有解决问题.

android android-fragments recycler-adapter android-recyclerview

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

在RECYCLER VIEW中添加页脚视图?

我想在回收站视图的基础上添加一个页脚布局.下面是我的适配器视图,它也会扩展页眉布局以及其他项目.帮助赞赏!

public class SplitMembersAdapter extends RecyclerViewAdapter<SplitMember, SplitMemberViewHolder> {

        private final ArrayList<SplitMember> mSplitMembersList;
        private final ImageLoader mImageLoader;
        private static final int TYPE_HEADER = 0;
        private static final int TYPE_ITEM = 1;
        private int splitAmount;
        private boolean isAmountSplitted;

        public SplitMembersAdapter(ArrayList<SplitMember> members,ImageLoader imageLoader) {
            mSplitMembersList = members;
            mImageLoader = imageLoader;
        }

        @Override
        public int getItemCount() {
            return mSplitMembersList.size();
        }

        @Override
        public int getItemViewType(int position) {
            if (isPositionHeader(position)) {
                return TYPE_HEADER;
            }

            return TYPE_ITEM;
        }

        private static boolean isPositionHeader(int position) {
            return position == …
Run Code Online (Sandbox Code Playgroud)

android android-adapter recycler-adapter android-recyclerview

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

向上滚动时StaggeredGridLayout会混乱

StaggeredGridLayout为我做了这个RecyclerView: 在此输入图像描述

这是代码:

 @Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {

    Photo photo = mPhotos.get(position);

    TextView titleView = ((CellViewHolder) viewHolder).titleTextView;
        titleView.setText(photo.getTitle());

    TextView subTitleView = ((CellViewHolder) viewHolder).subtitleTextView;
        subTitleView.setText(photo.getName());

    Picasso.with(mContext).load(photo.getPhotoUrl()).into(((CellViewHolder) viewHolder).imageView);

    ImageView userImageOverlay = ((CellViewHolder) viewHolder).userImageOverlay;

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();

    if (position == 0 || position % 4 == 0) {
        layoutParams.setFullSpan(true);
        layoutParams.height = Math.round(Utils.convertDpToPixel(202.67f, mContext));
        titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21.67f);
        subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12.00f);
        userImageOverlay.setVisibility(View.VISIBLE);
    } else if ((position - 1) % 4 == 0) {
        layoutParams.setFullSpan(false);
        layoutParams.height = Math.round(Utils.convertDpToPixel(360.00f, mContext)); …
Run Code Online (Sandbox Code Playgroud)

android staggered-gridview recycler-adapter android-recyclerview

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

回收站视图中的动态视图问题

我正在使用回收站视图来显示包含图像网格布局的项目列表.网格布局动态添加到回收器视图适配器上"onBindViewHolder"方法内的列表项.现在的问题是在每个滚动上重新创建网格布局视图.我不希望在滚动时重新创建这些视图.怎么处理?

这是代码片段

 @Override
    public void onBindViewHolder(final PersonViewHolder personViewHolder, final int i) {

                GridLayout feedGrid = new GridLayout(context);
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(dipToPixels(context,HomePage.SCREEN_WIDTH),dipToPixels(context,HomePage.SCREEN_WIDTH));
                feedGrid.setLayoutParams(layoutParams);
                feedGrid.setColumnCount(1);

                imgArr = new ImageView[num];
                imgArr[0] = new ImageView(context);
                GridLayout.Spec row = GridLayout.spec(0, 1);
                GridLayout.Spec colspan = GridLayout.spec(0, 1);
                GridLayout.LayoutParams gridLayoutParam = new GridLayout.LayoutParams(row, colspan);
                gridLayoutParam.setGravity(Gravity.FILL);

                    Picasso.with(context).load(urlArr.get(0)).error(mDrawable).placeholder(mDrawable).into(imgArr[0], new Callback() {
                        @Override
                        public void onSuccess() {
                            personViewHolder.feedGridLayout.setVisibility(View.VISIBLE);
                            personViewHolder.loadImg.setVisibility(View.GONE);
                        }

                        @Override
                        public void onError() {
                            personViewHolder.feedGridLayout.setVisibility(View.GONE);
                            personViewHolder.loadImg.setVisibility(View.VISIBLE);

                        }

                    });



                feedGrid.addView(imgArr[0], gridLayoutParam);

                personViewHolder.feedGridLayout.removeAllViews();

                personViewHolder.feedGridLayout.addView(feedGrid);

}
Run Code Online (Sandbox Code Playgroud)

android android-gridlayout recycler-adapter android-recyclerview

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

Android,Glide显示错误图像约一秒钟

我正在使用Glide库从URL加载图像,而URL是从Graph Request(Facebook)获得的。在RecyclerAdapter中使用。当我滚动时,每个ImageView会在不到一秒钟的时间内显示错误的图片,然后进行纠正。这是代码:

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

    ImageView main_image = viewHolder.main_image,

    getEventCover(position, main_image);

        }

private void getEventCover(int position, final ImageView img){

        GraphRequest request = GraphRequest.newGraphPathRequest(
                AccessToken.getCurrentAccessToken(),
                event.get(position).getEventID(),
                new GraphRequest.Callback() {
                    @Override
                    public void onCompleted(GraphResponse response) {

                        JSONObject data = response.getJSONObject();

                        try {
                            JSONObject cover = data.getJSONObject("cover");
                            String source = cover.getString("source");

                            Glide.with(fragment)
                                    .load(source)
                                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                                    .centerCrop()
                                    .into(img);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
        );

        Bundle parameters = new Bundle();
        parameters.putString("fields", "cover");
        request.setParameters(parameters);
        request.executeAsync();
}
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-glide

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

Lateinit属性适配器尚未在Kotlin4Android中初始化

我已经创建RecyclerViewfragment里面activity,所有的工作都很好,但是当我这样做notifyDataSetChanged(),以adapteractivity通过interface,我得到一个错误" lateinit属性adapter尚未初始化 ",但我已经initialized adapter

    class BuildingListFragment : Fragment(), MainActivity.EditInterface {


    lateinit var adapter: BuildingListAdapter

    private var mListener: OnFragmentInteractionListener? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        return inflater!!.inflate(R.layout.fragment_building_list, container, false)
    }

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val buildingList = ArrayList<BuildingDetailModel>()

        val …
Run Code Online (Sandbox Code Playgroud)

android kotlin recycler-adapter kotlin-android-extensions

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

ApplicationContext或Activity Context是否适合于Adapter?

我在项目上将适配器用于ListView / RecycleView。但是我想知道应该将哪种上下文传递给适配器?是ApplicationContext还是Activity Context(在活动上表示此意思)?据我所知,即使活动被杀死,系统也不会杀死适配器。所以我在这里有些困惑:

  1. 如果我将活动上下文传递给适配器,则适配器对活动具有隐式引用。活动可以杀死吗?
  2. 另一方面,我传递了ApplicationContext。适配器还能使用多长时间?活动结束后是否由GC收集?
  3. 在特定情况下应该传递哪种上下文

谢谢,

android listview recycler-adapter android-recyclerview

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

如何限制RecyclerView中的项目数?

如何限制RecyclerView 显示的项目数?

如果覆盖getChildCount,我可以限制插入的数量,但这会使它仅插入该数字然后停止。我希望它继续插入/滚动,但只显示 X个项目。

(注意:每个项目的高度都可以不同,因此,限制基于数量而不是某些硬编码值非常重要。)

android recycler-adapter android-recyclerview recyclerview-layout

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

使用分页库时正确处理“正在加载更多”视图

我正在探索Architecture Components套件的Paging库。

我的问题是在使用Paging提供的结构时实现“加载更多”视图(旋转器)。

我通常会手动实现无限滚动模式。这意味着我通常会向适配器提供一个“视图模型”列表(在建筑组件意义上不一定是视图模型,只是代表所有列表项的实体),包括一个可选附加的“加载更多”对象,适配器随后将显示为“加载”视图。

该解决方案具有某些优势,例如更好的可测试性以及使UI层尽可能简单和被动,从而使适配器与任何业务逻辑分离。

分页似乎并不容易。从我所看到的,您应该将PagedList实例流连接到该PagedListAdapter.submitList方法,魔术本身就会发生。

然后,为了添加微调器,您实际上要从视图模型中公开“网络状态”,将其分别传递给适配器,然后让适配器动态注入微调器。

就是这样在示例代码中完成的-https: //github.com/googlesamples/android-architecture-components/blob/master/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit /ui/PostsAdapter.kt

class PostsAdapter /* snip */ {
    private var networkState: NetworkState? = null

    // snip

    private fun hasExtraRow() = networkState != null && networkState != NetworkState.LOADED

    // snip

    override fun getItemCount(): Int {
        return super.getItemCount() + if (hasExtraRow()) 1 else 0
    }

    fun setNetworkState(newNetworkState: NetworkState?) {
        val previousState = this.networkState
        val hadExtraRow = hasExtraRow()
        this.networkState = newNetworkState
        val hasExtraRow = hasExtraRow()
        if (hadExtraRow …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-architecture-components android-paging

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

活动/片段中的警报对话框确认后,如何在单击时更新RecyclerView按钮状态?

我有一个非常独特的情况,我在recyclerview中有一个按钮,单击该按钮(初始状态为“ register”)后,会将其意图传递给片段或活动中的广播接收器,并在其中引发警报对话框,带有2个选项,是的或者没有。如果选择否,则什么也不会发生,并且对话框会消失,但是如果单击是,它将处理我在我的演示者类中定义的函数(与数据有关),并且应该将我的按钮ui状态更新为“取消”。其他方法也一样,单击“取消”将返回警报,单击“是”将切换ui文本进行注册。

现在我已经实现了如下代码(请注意,即使notifydatasetchanged对我也不起作用)。知道我做错了什么以及如何实现吗?我public void onBind(int position)的适配器功能代码:

if (repo.getIsRsvpAvailable().equals("true")) {
    rsvpButton.setVisibility(View.VISIBLE);
    for (int i = 0; i < mAllRSVPEventsList.size(); i++) {
        if (mAllRSVPEventsList.get(i).getEvent().getEventId().equals(repo.getEventId()) && mAllRSVPEventsList.get(i).getIsAttending()) {
            rsvpButton.setText("CANCEL");
            rsvpButton.setOnClickListener(v -> {
                Intent in = new Intent("main_rsvp_button_clicked");
                in.putExtra("main_rsvp_event_id", repo.getEventId());
                in.putExtra("main_rsvp_is_attending", "false");
                in.putExtra("main_rsvp_item_position", position);
                rsvpButton.getContext().sendBroadcast(in);
            });
            break;
        } else {
            rsvpButton.setText("RSVP");
            rsvpButton.setOnClickListener(v -> {
                Intent in = new Intent("main_rsvp_button_clicked");
                in.putExtra("main_rsvp_event_id", repo.getEventId());
                in.putExtra("main_rsvp_is_attending", "true");
                in.putExtra("main_rsvp_item_position", position);

                rsvpButton.getContext().sendBroadcast(in);
            });
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的活动中广播接收器中的相应代码:

private BroadcastReceiver mEventIdReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context …
Run Code Online (Sandbox Code Playgroud)

java android broadcastreceiver recycler-adapter android-recyclerview

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