首页 > 解决方案 > 在 Recyclerview 中获取所选项目的位置

问题描述

我正在使用 Recyclerview。我用 Recyclerview 添加了一个菜单。我想在 Recyclerview 中制作一个开关盒。所以当我点击第1项时,当我点击第2项时,我点击第3步。当我点击我的项目时..我想调用一个函数。目前我尝试使用 getAdapterPosition 读取项目的位置,但输出始终为 -1。比如我点击model的时候,点击model2的时候,我想调用一个函数。

Main2Activity

public class Main2Activity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

 RecyclerView navRecyclerView;
    LinearLayoutManager layoutManager;
    ArrayList<NavigationDataModel> arrayList = new ArrayList<>();
    NavigationAdapter adapter;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

navigationView.setNavigationItemSelectedListener(this);

        navRecyclerView = findViewById(R.id.navRecyclerView);
        navRecyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        navRecyclerView.setLayoutManager(layoutManager);

        DividerItemDecoration divider = new DividerItemDecoration(
                navRecyclerView.getContext(),
                DividerItemDecoration.VERTICAL
        );
        divider.setDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.diveder_recycler));
        navRecyclerView.addItemDecoration(divider);

        initArray();

        adapter = new NavigationAdapter(this, arrayList);
        navRecyclerView.setAdapter(adapter);
 private void initArray() {

        NavigationDataModel model = new NavigationDataModel();
        model.setIcon(R.mipmap.avatar);
        model.setTitle("Hesabım");
        arrayList.add(model);

        NavigationDataModel model2 = new NavigationDataModel();
        model2.setIcon(R.mipmap.sss3);
        model2.setTitle("S.S.S");
        arrayList.add(model2);
}

导航适配器

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

    Context context;
    ArrayList<NavigationDataModel> arrayList = new ArrayList<>();

    public NavigationAdapter(Context context, ArrayList<NavigationDataModel> arrayList) {
        this.context = context;
        this.arrayList = arrayList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.navigationrecyclerview_adapter11, parent, false);


        final ViewHolder holder = new ViewHolder(view);
        holder.navTitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = holder.getAdapterPosition();
                System.out.println("asdasdadasd" + position);
            }
        });


        return new ViewHolder(view);
    }


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

        holder.navIcon.setImageResource(arrayList.get(position).getIcon());
        holder.navIconNew.setImageResource(arrayList.get(position).getIcon());
        holder.rootView.setBackgroundColor(arrayList.get(position).getColor());
        holder.navTitle.setText(arrayList.get(position).getTitle());
    }


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



    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView navIcon, navIconNew;
        TextView navTitle;
        LinearLayout rootView;

        public ViewHolder(View itemView) {
            super(itemView);
            rootView = itemView.findViewById(R.id.rootView);
            navIcon = itemView.findViewById(R.id.navIcon);
            navIconNew = itemView.findViewById(R.id.navIconNew);
            navTitle = itemView.findViewById(R.id.navTitle);
            Toast.makeText(context, String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();

        }
    }
}

标签: android

解决方案


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

        holder.navIcon.setImageResource(arrayList.get(position).getIcon());
        holder.navIconNew.setImageResource(arrayList.get(position).getIcon());
        holder.rootView.setBackgroundColor(arrayList.get(position).getColor());
        holder.navTitle.setText(arrayList.get(position).getTitle());
holder.navTitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // use position herer
            }
        });

    }

推荐阅读