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;
}
}
ありがとうございました :)