简体   繁体   English

Android RecyclerView - 如何在调用 CustomAdapter 的 Fragment 类中选择项目。 我知道如何使用 get(getAbsoluteAdapterPosition()

[英]Android RecyclerView - How to get items selected in Fragment class which calls CustomAdapter. I know how to use get(getAbsoluteAdapterPosition()

Below recycler view code is working fine and I can Toast message what recycler view position was selected in RecycleAdapter class.下面的回收器视图代码工作正常,我可以向 RecycleAdapter 类中选择哪个回收器视图位置发送消息。 But I want to know how can I get what recycler position selected in HomeFragment class?.但我想知道如何获得在 HomeFragment 类中选择的回收站位置? I tried to get position by setting onclick listener to Imageview and Textview but gives error as reference to Null.我试图通过将 onclick 侦听器设置为 Imageview 和 Textview 来获得位置,但将错误作为对 Null 的引用。 Basically I want to use get(getAbsoluteAdapterPosition() in HomeFragment class to know what item selected and navigate to another Fragment. get(getAbsoluteAdapterPosition() is working as expected inside RecycleAdapter.class基本上我想在 HomeFragment 类中使用 get(getAbsoluteAdapterPosition() 来了解选择的项目并导航到另一个 Fragment。get(getAbsoluteAdapterPosition() 在 RecycleAdapter.class 中按预期工作

binding.recyclerview.setOnClickListener is not working in HomeFragment.class. binding.recyclerview.setOnClickListener 在 HomeFragment.class 中不起作用。 no error but no when I click on recycler views this is not shooted.没有错误,但当我点击回收站视图时没有,这不是拍摄的。

txt.setOnClickListener is giving error as null refernce which makes sense. txt.setOnClickListener 将错误作为空引用给出,这是有道理的。 because this is inflated in Adapter class but trying to refer in HomeFragement class.因为这在 Adapter 类中被夸大了,但试图在 HomeFragement 类中引用。 So how can I get what selected in homefragment.class.那么我怎样才能得到 homefragment.class 中选择的内容。 Thanks in advance提前致谢

HomeFragment.class ''' HomeFragment.class '''

public class HomeFragment extends Fragment {
    HomeFragmentBinding binding;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.id.home_fragment, container, false);
        return v;
    }

    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

        %% some code here %%
        recycleAdapter = new RecycleAdapter(list);

        binding.recyclerview.setAdapter(recycleAdapter);

        TextView txt = (TextView) binding.getRoot().findViewById(R.id.recycler_text);
        txt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "Clicked on Image", Toast.LENGTH_SHORT).show();
            }
        });

        binding.recyclerview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "RecyclerView clicked", Toast.LENGTH_SHORT).show();
                Log.d("RecyclerViewclicked", " --- ");
            }
        });

''' '''

RecycleAdapter.class RecycleAdapter.class

''' '''

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder>{
    RecyclerRowItemsBinding binding;
    List<IconsModel> iconsList;
    public RecycleAdapter(List<IconsModel> iconslist) {
        this.iconsList = iconslist;
    }
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflator = LayoutInflater.from(parent.getContext());
    View v = inflator.inflate(R.layout.recycler_row_items, parent, false);
    MyViewHolder myviewholder = new MyViewHolder(v);
    return myviewholder;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    IconsModel iconModel = iconsList.get(position);
    holder.imageView.setImageResource(iconModel.getImageid());
    holder.recyclertext.setText(iconModel.getIconName());
}

@Override
public int getItemCount() {
    //return 20;
    return iconsList.size();
}

class MyViewHolder extends RecyclerView.ViewHolder{
    ImageView imageView;
    TextView recyclertext;
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        imageView = itemView.findViewById(R.id.recycler_image);
        recyclertext = itemView.findViewById(R.id.recycler_text);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                IconsModel iconModel = iconsList.get(getAbsoluteAdapterPosition());
                Toast.makeText(***itemView.getContext(), "Clicked on "+iconModel.getIconName()***, Toast.LENGTH_SHORT).show();

            }
        });

    }
}

;

} ''' } '''

home_fragment.xml home_fragment.xml

<androidx.constraintlayout.widget.ConstraintLayout 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"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout_editor_absoluteX="1dp"
        tools:layout_editor_absoluteY="1dp"
        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"/>
</androidx.constraintlayout.widget.ConstraintLayout>

''' recycler_row.xml ''' recycler_row.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_gravity="center"
    android:layout_margin="5dp"
    android:orientation="horizontal"
    app:cardCornerRadius="5dp"
    app:cardElevation="5dp"
    app:cardBackgroundColor="@color/home_bg_cardview">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/selectableItemBackground"
        android:backgroundTint="@color/home_bg_cardview"
        android:weightSum="2">

        <ImageView
            android:id="@+id/recycler_image"
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:layout_weight="0.5"
            app:srcCompat="?android:attr/actionModeWebSearchDrawable"
            tools:ignore="ContentDescription" />

        <TextView
            android:id="@+id/recycler_text"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginBottom="29dp"
            android:layout_weight="1.5"
            android:gravity="center"
            android:text="Browse Items"
            android:textAlignment="center"
            android:textSize="24sp" />

    </LinearLayout>
</androidx.cardview.widget.CardView>

If you want to get the click event of recyclerview item in HomeFragment ,如果要获取 HomeFragment 中 recyclerview 项的点击事件,

Interface It's a good choice界面 不错的选择

//RecycleAdapter

private RecyclerViewListener  recyclerViewListener  

public void setRecyclerViewListener(RecyclerViewListener  recyclerViewListener){
this.RecyclerViewListener  recyclerViewListener ;
}

public Interface RecyclerViewListener{
void onClick(View  view);
}




class MyViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
TextView recyclertext;
public MyViewHolder(@NonNull View itemView) {
    super(itemView);

 
    recyclertext = itemView.findViewById(R.id.recycler_text);

    recyclertext .setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          if(recyclerViewListener  !=null)recyclerViewListener.onClick(v)

        }
    });

}


//HomeFragment

recycleAdapter.setRecyclerViewListener(new RecyclerViewListener{
@Override
        public void onClick(View v) {
        //todo

        }
})

Create Interface Class in your Project在您的项目中创建接口类

public interface ItemClick {
public void onClick(IconsModel IconsModel,int pos);
}

Interface class call your recyclerAdapter接口类调用你的 recyclerAdapter

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {

Context context;
List<IconsModel> iconsList;
ItemClick click;

public TokensListAdapter(Context context, List<IconsModel> iconsList, ItemClick click) {
    this.context = context;
    this.tokensModelList = tokensModelList;
    this.click = click;
}

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

@Override
public void onBindViewHolder(@NonNull TokensListAdapter.ViewHolder holder, int position) {

    IconsModel iconModel = iconsList.get(position);
    holder.imageView.setImageResource(iconModel.getImageid());
    holder.recyclertext.setText(iconModel.getIconName());


    holder.itemView.setOnClickListener(v -> {
        click.onClick(iconModel,position);
    });
}

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

public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView imageView;
    TextView recyclertext;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.recycler_image);
        recyclertext = itemView.findViewById(R.id.recycler_text);
    }
  }
}

Interface Class implement Your Fragment接口类实现你的片段

public class HomeFragment  extends Fragment implements ItemClick {

//adapter assign
recycleAdapter = new RecycleAdapter(getContext,list,this);

override method import your fragment覆盖方法导入您的片段

@Override
public void onClick(ItemCLick click, int pos) {
 Toast.makeText(getContext(), "Clicked" + pos, Toast.LENGTH_SHORT).show();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在Android recyclerview中获取选中项{先前选择的数组项列表}设置为已选中{总计项} - How to get Selected items {list of previously selected array items} set as checked in android recyclerview {Total items} 当片段中包含片段时,如何在recyclerview中获取所选项目? - How to Get the selected item in a recyclerview, when is within a fragment? 从customadapter listview Android获取所选项目 - Get selected item from customadapter listview Android 如何在 RecyclerView CustomAdapter 中启动Activity - How to startActivity within RecyclerView CustomAdapter 如何在Android中的RecyclerView中跟踪所选项目? - How to keep track of the selected items in a RecyclerView in Android? 如何在Android的CustomAdapter类中调用相机意图? - How to call camera intent in CustomAdapter class in android? 如何获取多个选定的已选中项目(Android)? - How to get multi selected checked items (android)? 如何在CustomAdapter上使用notifyDataSetChanged? - How to use notifyDataSetChanged on CustomAdapter? 如何让RecyclerView onClick在片段中工作 - How to get RecyclerView onClick working in a Fragment 我如何知道在Android Studio中选择了哪个单选按钮 - How can I know which radio button is selected in Android studio
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM