Listview 从ViewHolder Android获取位置作为标记
我正在尝试从列表视图开始一个新活动。我正在从数据库中加载一些数据并在另一个活动中打开它…当我使用我的customAdapter中的OnItemClickListener和getTag时效果很好…但结果在listview的某些iTen中显示重复。搜索一些主题…我找到了资源视图持有者 它解决了复制问题,但我无法从holder.getTag()启动新活动 我的观点持有者Listview 从ViewHolder Android获取位置作为标记,listview,android-intent,view,get,custom-adapter,Listview,Android Intent,View,Get,Custom Adapter,我正在尝试从列表视图开始一个新活动。我正在从数据库中加载一些数据并在另一个活动中打开它…当我使用我的customAdapter中的OnItemClickListener和getTag时效果很好…但结果在listview的某些iTen中显示重复。搜索一些主题…我找到了资源视图持有者 它解决了复制问题,但我无法从holder.getTag()启动新活动 我的观点持有者 static class ViewHolder { TextView hs; TextView hi; Te
static class ViewHolder {
TextView hs;
TextView hi;
TextView ha;
ImageView ho;
ImageView hm;
}
我的customAdapter视图代码
public View getView(int position, View convertView, ViewGroup parent) {
DataAdapter.ItemLista item = itens.get(position);
final ViewHolder holder;
if(convertView==null){
convertView = inflater.inflate(R.layout.linha_listview, null);
holder = new ViewHolder();
holder.hi = (TextView)convertView.findViewById(R.linhaLista.id);
holder.hs = (TextView)convertView.findViewById(R.linhaLista.musica);
holder.ha = (TextView)convertView.findViewById(R.linhaLista.cantor);
holder.ho = (ImageView)convertView.findViewById(R.linhaLista.cat_oracao);
holder.hm = (ImageView)convertView.findViewById(R.linhaLista.cat_missa);
/*if (imgMissa.equals(null)) {
missa.setImageResource(R.drawable.blank);
}else if(imgOra.equals("louvor")) {
missa.setImageResource(R.drawable.louvor);
}else if(imgOra.equals("adoracao")) {
missa.setImageResource(R.drawable.adoracao);
}*/
convertView.setTag(holder);
Log.v(String.valueOf(holder),"valor do setholder");
}else {
holder = (ViewHolder) convertView.getTag();
Log.v(String.valueOf(holder),"valor do getholder");
}
holder.hi.setText(String.valueOf(item.id));
holder.hs.setText(item.musica);
holder.ha.setText(item.cantor);
String imgOra = item.oracao;
if (imgOra.equals(null)) {
holder.ho.setImageResource(R.drawable.blank);
}else if(imgOra.equals("louvor")) {
holder.ho.setImageResource(R.drawable.louvor);
}else if(imgOra.equals("adoracao")) {
holder.ho.setImageResource(R.drawable.adoracao);
}
return convertView;
}
在这种情况下,我需要获取field holder.hi as标记。有人知道如何解决这个问题吗?我解决了这个问题,在自定义适配器中添加了一个意图,而不是片段。因此,为了使其工作,我必须更改代码的某些部分,添加字符串[]和上下文。下面是我找到的解决方案。希望它能帮助未来的疑虑
public class CustomAdapter extends BaseAdapter{
LayoutInflater inflater;
List<DataAdapter.ItemLista> itens;
DataAdapter.ItemLista item;
ViewHolder holder;
Context context;
public CustomAdapter(Context contexto, List<DataAdapter.ItemLista> itens) {
super();
this.itens = itens;
this.context = contexto;
this.inflater = (LayoutInflater)contexto.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
.
.
.
public View getView(final int position, View convertView, ViewGroup parent) {
final String[] extra = new String[itens.size()];
item = itens.get(position);
if(convertView==null){
convertView = inflater.inflate(R.layout.linha_listview, null);
holder = new ViewHolder();
holder.hi = (TextView)convertView.findViewById(R.linhaLista.id);
holder.hs = (TextView)convertView.findViewById(R.linhaLista.musica);
holder.ha = (TextView)convertView.findViewById(R.linhaLista.cantor);
holder.ho = (ImageView)convertView.findViewById(R.linhaLista.cat_oracao);
holder.hm = (ImageView)convertView.findViewById(R.linhaLista.cat_missa);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.hi.setText(String.valueOf(item.id));
holder.hs.setText(item.musica);
holder.ha.setText(item.cantor);
extra[position] = String.valueOf(item.id);
String imgOra = item.oracao;
if (imgOra.equals(null)) {
holder.ho.setImageResource(R.drawable.blank);
}else if(imgOra.equals("louvor")) {
holder.ho.setImageResource(R.drawable.louvor);
}else if(imgOra.equals("adoracao")) {
holder.ho.setImageResource(R.drawable.adoracao);
}
convertView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent mostraLetra = new Intent();
mostraLetra.setClass(context, ExibeMusica.class);
mostraLetra.putExtra("id",extra[position]);
context.startActivity(mostraLetra);
}
});
return convertView;
}
公共类CustomAdapter扩展了BaseAdapter{
充气机;
列出ITEN;
DataAdapter.ItemLista项;
视窗座;
语境;
公共CustomAdapter(上下文上下文,列表iten){
超级();
this.itens=itens;
this.context=contexto;
this.inflater=(LayoutInflater)contexto.getSystemService(Context.LAYOUT\u inflater\u SERVICE);
}
.
.
.
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终字符串[]额外=新字符串[itens.size()];
项目=itens.get(位置);
if(convertView==null){
convertView=充气机。充气(R.layout.linha_列表视图,空);
holder=新的ViewHolder();
holder.hi=(TextView)convertView.findViewById(R.linhaLista.id);
holder.hs=(TextView)convertView.findViewById(R.linhaLista.musica);
holder.ha=(TextView)convertView.findViewById(R.linhaLista.cantor);
holder.ho=(ImageView)convertView.findViewById(R.linhaLista.cat_oracao);
holder.hm=(ImageView)convertView.findViewById(R.linhaLista.cat_missa);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.hi.setText(String.valueOf(item.id));
holder.hs.setText(音乐项);
holder.ha.setText(项目.CONTOR);
额外[位置]=字符串.valueOf(item.id);
字符串imgOra=item.oracao;
if(imgOra.equals(null)){
HOR.ho.setImageResource(R.drawable.blank);
}否则如果(imgOra.等于(“louvor”)){
ho.setImageResource(R.drawable.louvor)的持有者;
}否则如果(imgOra.equals(“adoracao”)){
ho.setImageResource(R.drawable.adoracao)持有人;
}
convertView.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
Intent mostraLetra=新Intent();
setClass(上下文,ExibeMusica.class);
mostraLetra.putExtra(“id”,额外[位置]);
背景:星触觉(mostraLetra);
}
});
返回视图;
}
这真的有效吗?当您知道“position”变量时,onClick侦听器不会出现