0

ListView を折りたたむ方法を考えています。

私は次のような文字列配列を持っています:

  • アリス
  • ボブ
  • ヌル
  • ヌル
  • ヌル
  • カール

null 以外の ListView を表示する必要がありますが、Carl をクリックした場合、Carl が 5 番目の位置にあったことを知る必要があります。

私の ListAdapter では、3 つのエントリ (Alice、Bob、empty_entry) が表示されます。empty_entry をクリックすると、カールがかかりますが、位置は 5 ではなく 2 です。

コードを修正するにはどうすればよいですか?

package com.gorgo.pirates.model;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.pirates.R;

public class ListViewCustomAdapter extends BaseAdapter {
public String title[];

public Context context;
public LayoutInflater inflater;

public ListViewCustomAdapter(Context context, String[] title) {
    super();

    this.context = context;
    this.title = title;
    this.inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    // return not-null values count
    int count = 0;
    for (int i = 0; i < title.length; i++) {
        if (title[i] != null)
            count++;
    }
    return count;
}

@Override
public Object getItem(int position) {
    int start = position;

    while (start != title.length) {
        if (title[start] != null)
            return title[start];
        else
            start++;
    }

    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

public static class ViewHolder {
    TextView txtViewTitle;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    Typeface chops = Typeface.createFromAsset(this.context.getAssets(),
            "Commodore.ttf");

    ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        convertView = inflater.inflate(R.layout.listitem_row, null);

        holder.txtViewTitle = (TextView) convertView
                .findViewById(R.id.txtViewTitle);
        convertView.setTag(holder);
    } else
        holder = (ViewHolder) convertView.getTag();

    holder.txtViewTitle.setText(title[position]);
    holder.txtViewTitle.setTypeface(chops);
    holder.txtViewTitle.setTextColor(Color.CYAN);
    holder.txtViewTitle.setShadowLayer(10, 5, 5, Color.BLACK);
    holder.txtViewTitle.measure(MeasureSpec.makeMeasureSpec(
            convertView.getWidth() - 5, MeasureSpec.EXACTLY), MeasureSpec
            .makeMeasureSpec(convertView.getHeight(), MeasureSpec.EXACTLY));
    holder.txtViewTitle.layout(0, 0,
            holder.txtViewTitle.getMeasuredWidth(),
            holder.txtViewTitle.getMeasuredHeight());
    holder.txtViewTitle.setTextSize(13);

    return convertView;
}
}

ありがとうございました :)

4

0 に答える 0