Listview 从ViewHolder Android获取位置作为标记

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

我正在尝试从列表视图开始一个新活动。我正在从数据库中加载一些数据并在另一个活动中打开它…当我使用我的customAdapter中的OnItemClickListener和getTag时效果很好…但结果在listview的某些iTen中显示重复。搜索一些主题…我找到了资源视图持有者

它解决了复制问题,但我无法从holder.getTag()启动新活动

我的观点持有者

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侦听器不会出现