Recyclerview 根据单击的项目获取项目值

Posted

技术标签:

【中文标题】Recyclerview 根据单击的项目获取项目值【英文标题】:Recycle view get item value base on item clicked 【发布时间】:2018-09-01 20:18:53 【问题描述】:

我只是创建了一个带有回收视图的对话框。当我单击该项目时,它应该根据我单击的内容设置编辑文本。但事实并非如此,它在回收视图中显示了第一个值。有人可以帮助我根据我点击的内容获得价值。我只是创建一个带有回收视图的对话框。当我单击该项目时,它应该根据我单击的内容设置编辑文本。但事实并非如此,它在回收视图中显示了第一个值。有人可以帮助我根据我点击的内容获得价值

@SuppressLint("ResourceType")
@OnClick(R.id.button_choose)
void chooseLOV() 

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    LayoutInflater inflater = this.getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.lov_kodepos, null);
    dialogBuilder.setView(dialogView);

    final RecyclerView recyclerView = (RecyclerView) dialogView.findViewById(R.id.rv_lov_kodepos);
    final EditText search  = (EditText) dialogView.findViewById(R.id.editText_lov_search);
    search.addTextChangedListener(new TextWatcher() 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) 

        

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 
            ArrayList<KodePos> kodePos = new ArrayList<>();
            if (tempData!=null)
                for (KodePos kodePosSatu: data )
                    String dat = s.toString().toLowerCase();
                    if (kodePosSatu.getPosCamat().toLowerCase().contains(dat)) 
                        kodePos.add(kodePosSatu);
                    
                
                tempData = kodePos;
                recyclerView.setAdapter(new KodePosAdapter(tempData));
            
        

        @Override
        public void afterTextChanged(Editable s) 

        
    );


    API.getKodePos().enqueue(new Callback<ArrayList<KodePos>>() 
        @Override
        public void onResponse(Call<ArrayList<KodePos>> call, Response<ArrayList<KodePos>> response) 
            if (response.code()== 200)
                Log.i("bella", "onResponse: "+response);

                data = response.body();
                tempData = data;
                recyclerView.setHasFixedSize(true);
                recyclerView.addItemDecoration(new DividerItemDecoration(AddCustomerActivity.this, DividerItemDecoration.VERTICAL));
                recyclerView.setLayoutManager(new LinearLayoutManager(AddCustomerActivity.this));
                recyclerView.setAdapter(new KodePosAdapter(data));
            
        

        @Override
        public void onFailure(Call<ArrayList<KodePos>> call, Throwable t) 
            Toast.makeText(AddCustomerActivity.this, "Failed", Toast.LENGTH_SHORT).show();

        
    );

    final AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.show();

    recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(AddCustomerActivity.this, new RecyclerItemClickListener.OnItemClickListener() 
        @Override
        public void onItemClick(View view, int position) 
            et_kodepos.setText(data.get(position).getPosKode());
            et_kota.setText(data.get(position).getPosKota());
            et_provinsi.setText(data.get(position).getPosProp());
            et_kecamatan.setText(data.get(position).getPosCamat());
            et_kelurahan.setText(data.get(position).getPosLurah());

            alertDialog.dismiss();
        
    ));


【问题讨论】:

在这里创建您自己的interface。在您的MainActivityFragment 中注册它,您的回收站视图在哪里。将其设置在回收器视图的适配器内,并在单击回收器视图的任何项目时调用具有项目位置的接口方法。 使用position AS et_kodepos.setText(data.get(position).getPosKode()); 非常感谢!它解决了我的问题! @ADM @ADM 先生,我能问你一些问题吗?单击项目后如何关闭对话框? 解除对话框见***.com/a/49349852/4168607。 【参考方案1】:
 recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(AddCustomerActivity.this, new RecyclerItemClickListener.OnItemClickListener() 
    @Override
    public void onItemClick(View view, int position) 


        et_kodepos.setText(data.get(position).getPosKode());
        et_kota.setText(data.get(position).getPosKota());
        et_provinsi.setText(data.get(position).getPosProp());
        et_kecamatan.setText(data.get(position).getPosCamat());
        et_kelurahan.setText(data.get(position).getPosLurah());

    

));

在您的代码中,您每次都分配第 0 个(第一项)元素来编辑文本。

【讨论】:

以上是关于Recyclerview 根据单击的项目获取项目值的主要内容,如果未能解决你的问题,请参考以下文章

获取在 RecyclerView 中单击的特定项目的 ID [重复]

过滤 RecyclerView 项目并单击它后会给出错误的项目

如何从recyclerview适配器获取选定项目的数量?

获取所选recyclerView项目android的ID

如何在recyclerview中获取所选项目,何时在片段内?

计算recyclerview项目双精度值的总和