我得到多个ID更点击(ListView中自定义适配器GetView) [英] I get more than one id in one click (ListView custom adapter GetView)
问题描述
我想这样做,当我从列表中单击切换按钮,检索该行的TextView的ID。问题是,当获得多数IDS脉冲,当我滚动太......我不知道该怎么办!
我得到所有这些IDS在我的LogCat中..只有一个点击的位置adeww
我MyAdapter code是在这里:
公共类MyAdapter扩展ArrayAdapter< Usuari> { 私人最终名单< Usuari>清单;
私人最终活动范围内;
公共MyAdapter(Activity上下文,列表< Usuari>名单){
超(背景下,R.layout.row,清单);
this.context =背景;
this.list =清单;
} 静态类ViewHolder {
保护的TextView nom_usuari;
保护切换按钮boto_agregar;
}
@覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){ ViewHolder viewHolder = NULL;
如果(convertView == NULL){
LayoutInflater充气= context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row,NULL);
viewHolder =新ViewHolder();
viewHolder.nom_usuari =(TextView中)convertView.findViewById(R.id.nom_usuari);
viewHolder.boto_agregar =(切换按钮)convertView.findViewById(R.id.boto_agregar);
viewHolder.boto_agregar.setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){ 公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked){
INT为getPosition =(整数)buttonView.getTag(); //这里我们得到我们为使用setTag切换按钮的位置。
list.get(为getPosition).setSelected(buttonView.isChecked()); //设置切换按钮的值,以保持其状态。
字符串NOM = list.get(为getPosition).getName();
如果(器isChecked)
{
Log.d(SELECCIONAT,NOM); }
其他
{
Log.d(DESSELECCIONAT,NOM); }
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.nom_usuari,viewHolder.nom_usuari);
convertView.setTag(R.id.boto_agregar,viewHolder.boto_agregar);
}其他{
viewHolder =(ViewHolder)convertView.getTag();
}
viewHolder.boto_agregar.setTag(位置); //这一行是很重要的。
viewHolder.nom_usuari.setText(list.get(位置).getName());
viewHolder.boto_agregar.setChecked(list.get(位置).isSelected());
返回convertView;
} }
ATENTION!我找到了解决办法!我不得不删除IF和ELSE条件...
我希望它可以帮助你!我花了两个星期来解决它!
公共类MyAdapter扩展ArrayAdapter< Usuari> { 私人最终名单< Usuari>清单;
私人最终活动范围内;
ViewHolder viewHolder; 公共MyAdapter(Activity上下文,列表< Usuari>名单){
超(背景下,R.layout.row,清单);
this.context =背景;
this.list =清单;
} 静态类ViewHolder {
保护的TextView nom_usuari;
保护切换按钮boto_agregar;
} @覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){ viewHolder = NULL;
LayoutInflater充气= context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row,父母,假);
viewHolder =新ViewHolder();
viewHolder.nom_usuari =(TextView中)convertView
.findViewById(R.id.nom_usuari);
viewHolder.boto_agregar =(切换按钮)convertView
.findViewById(R.id.boto_agregar); viewHolder.boto_agregar.setChecked(list.get(位置).isSelected());
最终诠释一个viewPosition =位置; viewHolder.boto_agregar
.setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){ 公共无效onCheckedChanged(CompoundButton buttonView,
布尔器isChecked){ list.get(一个viewPosition).setSelected(
buttonView.isChecked());
字符串NOM = list.get(一个viewPosition).getName();
如果(器isChecked){
Log.d(SELECCIONAT,NOM);
}其他{
Log.d(DESSELECCIONAT,NOM); }
}
}); convertView.setTag(viewHolder);
convertView.setTag(R.id.nom_usuari,viewHolder.nom_usuari);
convertView.setTag(R.id.boto_agregar,viewHolder.boto_agregar); viewHolder.boto_agregar.setTag(位置); //这一行是很重要的。
viewHolder.nom_usuari.setText(list.get(位置).getName()); 返回convertView;
}}
而Usuari类:
公共类Usuari { 私人字符串NOM;
选择私人布尔; 公共Usuari(字符串NOM,布尔选择){
this.nom = NOM;
this.selected =选择;
} 公共字符串的getName(){
返回NOM;
} 公共布尔isSelected(){
返回所选择的;
} 公共无效的setSelected(布尔选择){
this.selected =选择;
}
}
I want to do that when I click a ToggleButton from the list, retrieve the ID of the row textview. The problem is that when most IDS pulse are obtained, and when I scroll too ... I do not know what to do!
I get all these IDS in my LogCat.. with only ONE CLICK on the position "adeww"
My MyAdapter code is here:
public class MyAdapter extends ArrayAdapter<Usuari>{
private final List<Usuari> list;
private final Activity context;
public MyAdapter(Activity context, List<Usuari> list) {
super(context, R.layout.row, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView nom_usuari;
protected ToggleButton boto_agregar;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row, null);
viewHolder = new ViewHolder();
viewHolder.nom_usuari = (TextView) convertView.findViewById(R.id.nom_usuari);
viewHolder.boto_agregar = (ToggleButton) convertView.findViewById(R.id.boto_agregar);
viewHolder.boto_agregar.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the togglebutton using setTag.
list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of togglebutton to maintain its state.
String nom = list.get(getPosition).getName();
if(isChecked)
{
Log.d("SELECCIONAT",nom);
}
else
{
Log.d("DESSELECCIONAT",nom);
}
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.nom_usuari, viewHolder.nom_usuari);
convertView.setTag(R.id.boto_agregar, viewHolder.boto_agregar);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.boto_agregar.setTag(position); // This line is important.
viewHolder.nom_usuari.setText(list.get(position).getName());
viewHolder.boto_agregar.setChecked(list.get(position).isSelected());
return convertView;
}
}
ATENTION! I found the solution!! I had to delete the IF and ELSE condition...
I hope that it helps you! I spent two weeks to fix it!
public class MyAdapter extends ArrayAdapter<Usuari> {
private final List<Usuari> list;
private final Activity context;
ViewHolder viewHolder;
public MyAdapter(Activity context, List<Usuari> list) {
super(context, R.layout.row, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView nom_usuari;
protected ToggleButton boto_agregar;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder = null;
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row, parent, false);
viewHolder = new ViewHolder();
viewHolder.nom_usuari = (TextView) convertView
.findViewById(R.id.nom_usuari);
viewHolder.boto_agregar = (ToggleButton) convertView
.findViewById(R.id.boto_agregar);
viewHolder.boto_agregar.setChecked(list.get(position).isSelected());
final int viewPosition = position;
viewHolder.boto_agregar
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
list.get(viewPosition).setSelected(
buttonView.isChecked());
String nom = list.get(viewPosition).getName();
if (isChecked) {
Log.d("SELECCIONAT", nom);
} else {
Log.d("DESSELECCIONAT", nom);
}
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.nom_usuari, viewHolder.nom_usuari);
convertView.setTag(R.id.boto_agregar, viewHolder.boto_agregar);
viewHolder.boto_agregar.setTag(position); // This line is important.
viewHolder.nom_usuari.setText(list.get(position).getName());
return convertView;
}
}
And the Usuari class:
public class Usuari {
private String nom;
private boolean selected;
public Usuari(String nom, boolean selected) {
this.nom = nom;
this.selected =selected;
}
public String getName() {
return nom;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
}
这篇关于我得到多个ID更点击(ListView中自定义适配器GetView)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!