0

リストビューから新しいアクティビティを開始しようとしています。データベースからいくつかのデータをロードして別のアクティビティで開きます...customAdapterからOnItemClickListenerとgetTagを使用すると正常に動作します...しかし、結果はリストビューの一部のイテンで重複して表示されました。いくつかのトピックを検索しています...リソースViewHolderが見つかりました。

重複の問題は解決しましたが、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;
}

この場合、フィールドholder.hiをタグとして取得する必要があります。誰もがそれを解決する方法を知っていますか?

4

1 に答える 1

0

この問題を解決し、フラグメントではなくカスタムアダプタ内にインテントを追加しました。したがって、それが機能するためには、String[]とContextを追加してコードの一部を変更する必要がありました。以下は私が見つけた解決策です。それが将来の疑問に役立つことを願っています。

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;
    }
于 2013-02-25T12:46:55.040 に答える