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
。在您的MainActivity
或Fragment
中注册它,您的回收站视图在哪里。将其设置在回收器视图的适配器内,并在单击回收器视图的任何项目时调用具有项目位置的接口方法。
使用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 项目并单击它后会给出错误的项目