标签: android-viewholder

如何从RecyclerView.Adapter打开片段<CardAdapter.ViewHolder>

1.TabLayout

- tab1 (Fragment1)
- tab2 (Fragment2)
- tab3 (Fragment3)
     * RecyclerView + CardView (OnClick)
Run Code Online (Sandbox Code Playgroud)

CardView ClickListner上打开tab3中的另一个片段.那么如何在tab3中打开片段.

错误在于getFragmentManager():

FragmentTransaction transaction = getFragmentManager().beginTransaction();
Run Code Online (Sandbox Code Playgroud)

而不是这样,我试过:

FragmentTransaction transaction = activity.getFragmentManager().beginTransaction();
FragmentTransaction transaction = itemview.getContext().getFragmentManager().beginTransaction();
Run Code Online (Sandbox Code Playgroud)

但错误并未解决.

这是我的代码:

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

    List<NatureItem> mItems;
    private int lastPosition = -1;
    Context context;
    TaskFragment main;
    public CardAdapter(Context context,TaskFragment ma)
    {

        this.context=context;
        main=ma;
    }


    public CardAdapter() {
        super();
        mItems = new ArrayList<NatureItem>();
        NatureItem nature = new NatureItem();
        nature.setName("The Paris Attack 2015");
        nature.setDes("Lorem ipsum …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewholder android-recyclerview

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

RecyclerView onCreateViewHolder返回类型与多个自定义ViewHolders不兼容

我正在尝试在RecyclerView中使用多个ViewHolders,以便在运行时交换这些视图.我创建了两个扩展RecyclerView.ViewHolder的类:

MenuItemViewHolder

public class MenuItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView menuItemText;
    public ImageView menuItemPhoto;
    public RecyclerViewAdapter rva;

    public MenuItemViewHolder(View itemView) {
         super(itemView);
         itemView.setOnClickListener(this);

         rva = caller;
         menuItemText = (TextView) itemView.findViewById(R.id.grid_text);
         menuItemPhoto = (ImageView) itemView.findViewById(R.id.grid_image);
    }

    @Override
    public void onClick(View view) {
          Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT).show();

    }

}
Run Code Online (Sandbox Code Playgroud)

SelectedItemViewHolder

public class SelectedItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView menuItemText;
    public ImageView menuItemPhoto;
    public RecyclerViewAdapter rva;

    public SelectedItemViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);

         menuItemText = (TextView) …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder staggeredgridlayout android-recyclerview recyclerview-layout

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

如何使RecyclerView停止回收定义的位置?

我的问题是:我在RecyclerView内的其中一个视图上发生了视频流.

当用户滚动时,视图将被回收,其他摄像头会在该回收的视图持有者上开始自己的流式传输.这对用户界面不利,因为流式处理需要几秒钟才能启动.

我怎么能对RecyclerView说:"嘿嘿回收器,请不要回收那个确切的位置x并给出那个位置总是与你第一次给出的相同的观察者,而不是随机的一个"?

请有人帮帮我=(

android recycle android-layout android-viewholder android-recyclerview

19
推荐指数
3
解决办法
2万
查看次数

在onCreateViewHolder中获取View的位置

我正在使用带有ImageView和TextView的单行布局的RecyclerView.

我想为View实现一个OnClickListener,而不是为单独的ViewHolder对象实现.如何在适配器中获取视图的位置?

现在我正在删除点击的评论,但我无法选择点击的视图.我在适当的行中添加了一个TODO.

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

    /** List of Comment objects */
    private List<Comment> mCommentList;

    /** Database with Comment objects */
    private CommentsDataSource mDataSource;

    /**
     * Construcutor for CommentAdapter
     *
     * @param commentList   List of Comment objects
     * @param dataSource    Database with Comment objects
     */
    public CommentAdapter(List<Comment> commentList, CommentsDataSource dataSource) {
        this.mCommentList = commentList;
        this.mDataSource = dataSource;
    }

    /**
     * Add Comment objects to RecyclerView
     *
     * @param position  The position where the Comment object is added …
Run Code Online (Sandbox Code Playgroud)

java android android-view android-viewholder android-recyclerview

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

仅将RecyclerView中的视图动态添加到当前项目

我正在动态地将视图添加到我的项目中RecyclerView.这些添加的视图应该只与它们被添加到的项目相关,但是当我滚动时我遇到了问题.它似乎View被回收并加载了一个新项目,但那些以前添加的视图仍然存在,只是现在在错误的项目上.

我假设它只是因为ViewHolder它被重用,所以添加的项目在加载时会再次出现一个新项目.

怎么会解决这个问题呢?

android android-viewholder android-recyclerview

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

Android:如何在CardView中插入RecyclerView?

我说的活动必须展现出RecyclerView通过填充CardViews作为项目.我的目标是在每个CardView中显示一个RecyclerView.

这是我的Activity的基本xml:

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

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

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

这是我的CardView的RecyclerView的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/card_analysis"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/activity_vertical_margin"
    android:layout_marginBottom="@dimen/activity_vertical_margin" 
    android:layout_marginLeft="@dimen/activity_horizontal_margin"
    android:layout_marginRight="@dimen/activity_horizontal_margin"
    android:padding="5dp"
    card_view:cardCornerRadius="5dp" >

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

        <android.support.v7.widget.RecyclerView
            android:id="@+id/item_mode"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="5dp"
            android:paddingLeft="@dimen/activity_horizontal_margin" >

        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

所以,我大胆地通过实现两个RecyclerView.Adapters来实现我的第一次尝试,一个用于(让我们称之为)"主"RecyclerView,一个用于每个CardView中的单个:

以下是两段代码:

"Main"RecyclerView(带ViewHolders):

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

    private static Context context;
    private LinearLayoutManager llm;
    private static ConjFormAdapter formAdapt;
    private ArrayList<String> adapterList;
    private …
Run Code Online (Sandbox Code Playgroud)

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

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

RecyclerView.Adapter的onCreateViewHolder被调用两次或更多次,多次

我目前正在开发一个使用RecyclerView的应用程序.

在查看LogCat时,我注意到onCreateViewHolder在实例化后被调用了两次.

09-22 05:22:55.209 V/Adapter? Construct
09-22 05:22:55.213 V/Adapter? onCreateViewHolder
09-22 05:22:55.224 V/Adapter? onBindViewHolder
09-22 05:22:55.240 V/Adapter? onCreateViewHolder
09-22 05:22:55.247 V/Adapter? onBindViewHolder
Run Code Online (Sandbox Code Playgroud)

此外,onBindViewHolder被调用了两次,但我知道每当项目被回收时都会调用它.

但我认为onCreateViewHolder只需调用一次即可.

这种异常行为吗?如果是这样,怎么解决?

android android-viewholder android-recyclerview

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

当滚动列表时,RecyclerView.getChild(index)显示null(索引搞砸了)

我一直在为我的Android应用程序使用SwipeableRecyclerView来为我的recyclerView启用滑动.RecyclerView包含cardViews列表.

我试图为卡片实现撤消功能,当向左滑动时会被删除(第一次滑动显示撤消,下一次滑动触发器删除)

我正在尝试以下代码(部分工作,我猜)

SwipeableRecyclerViewTouchListener srvTouchListner = new SwipeableRecyclerViewTouchListener(rvTimerList,
            new SwipeableRecyclerViewTouchListener.SwipeListener(){

                @Override
                public boolean canSwipe(int i) {
                    return true;
                }

                @Override
                public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] ints) {
                    for(int position : ints){
                        View view = recyclerView.getChildAt(position);
                            if (view.getTag(R.string.card_undo) == null) {
                                if(viewStack == null) {
                                    saveToViewStack(position, view);
                                    final ViewGroup viewGroup = (ViewGroup) view.findViewById(R.id.time_card2);
                                    view.setTag(R.string.card_undo, "true");
                                    viewGroup.addView(view.inflate(TimerSummary.this, R.layout.timeslot_card_undo, null));
                                }
                            } else {
                                Log.d(TAG, "Removing Item");
                                deleteTimeSlot(timerInstanceList.get(position));
                                Toast.makeText(TimerSummary.this, "Deleted!", Toast.LENGTH_SHORT).show();
                                timerInstanceList.remove(position);
                                finalSummaryAdapter.notifyItemRemoved(position);
                            }

                    }
                    finalSummaryAdapter.notifyDataSetChanged();
                }
                @Override
                public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder android-recyclerview

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

RecyclerView中的onBindView上的setAlpha()在第一次显示时不起作用

在RecyclerView.Adapter中使用以下代码:

onBindViewHolder(VH holder, int position){
   holder.itemView.setAlpha(0.5f);
}
Run Code Online (Sandbox Code Playgroud)

第一次显示该项目时不会显示Alpha.但是,如果您离开屏幕并返回,则会准确显示Alpha.正在设置该值,但在再次显示之前不会显示该值.有关如何让setAlpha()在首次查看时生效的任何想法.

android android-layout android-viewholder android-recyclerview

14
推荐指数
2
解决办法
2629
查看次数

创建时不得附加ViewHolder视图

我正在尝试创建一个显示TextView的简单RV.这是我的适配器:

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

private String[] mDataset;


public static class ViewHolder extends RecyclerView.ViewHolder {
    // each data item is just a string in this case
    public TextView mTextView;
    public ViewHolder(TextView v) {
        super(v);
        mTextView = v;
    }
}

public MyRvAdapter(String[] myDataset) {
    mDataset = myDataset;
}

@NonNull
@Override
public MyRvAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.text_row_item, parent, false);
    TextView userNameInList= v.findViewById(R.id.display_name);
    ViewHolder vh = new ViewHolder(userNameInList);
    return vh;
    }

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

android android-viewholder android-recyclerview

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