package com.example.wordbook; import java.util.List; import android.content.Context; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.example.wordbook.common.Common; import com.example.wordbook.common.Data; /** * 一覧画面用アダプタ */ public class WBListAdapter extends ArrayAdapter { /** CompoundDrawable */ private int mImage; /** LayoutInflater */ private LayoutInflater mInflater; /** * ViewHolder */ private static class ViewHolder { TextView level; TextView question; TextView answer; TextView title; ImageView divider; } /** * コンストラクタ * * @param context * コンテキスト * @param textViewResourceId * リソースID * @param objects * アイテム */ public WBListAdapter(Context context, int textViewResourceId, List objects) { super(context, textViewResourceId, objects); mInflater = LayoutInflater.from(context); // アイコン設定 switch (Common.getComm(context)) { case 0: mImage = R.drawable.icon_flag; break; case 1: mImage = R.drawable.icon_edit; break; case 2: mImage = R.drawable.icon_sound; break; case 3: mImage = R.drawable.icon_link; break; default: mImage = android.R.drawable.ic_delete; break; } } /* * (非 Javadoc) * * @see android.widget.Adapter#getView(int, android.view.View, * android.view.ViewGroup) */ @Override public View getView(final int position, View convertView, final ViewGroup parent) { // View設定 ViewHolder holder; View view = convertView; if (view == null) { view = mInflater.inflate(R.layout.list_wblist, parent, false); holder = new ViewHolder(); holder.level = (TextView) view.findViewById(R.id.textViewLevel); holder.question = (TextView) view .findViewById(R.id.textViewQuestion); holder.answer = (TextView) view.findViewById(R.id.textViewAnswer); holder.title = (TextView) view.findViewById(R.id.textViewTitle); holder.divider = (ImageView) view.findViewById(R.id.divider); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } // アイテム取得 Data data = getItem(position); // 検索結果画面で使用するタイトル用レイアウトと共用 if (data.num == 0) { // タイトル用レイアウト holder.level.setVisibility(View.GONE); holder.question.setVisibility(View.GONE); holder.answer.setVisibility(View.GONE); holder.title.setVisibility(View.VISIBLE); holder.divider.setVisibility(View.GONE); // 文字列設定 holder.title.setText(data.question); } else { // アイテム用レイアウト holder.level.setVisibility(View.VISIBLE); holder.question.setVisibility(View.VISIBLE); holder.answer.setVisibility(View.VISIBLE); holder.title.setVisibility(View.GONE); holder.divider.setVisibility(View.VISIBLE); // 背景色設定 Common.setBackgroundColor(view, data.flag); // レベル用TextView設定 holder.level.setText("Lv." + data.level); holder.level.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, mImage); // 質問欄設定 String q = data.question; if (data.data1.length() > 0) { /* TODO 発音記号追加 */ q += " / " + data.data1 + ""; } CharSequence cs = Html.fromHtml(q); // 文字列設定 switch (data.stat & Data.STAT_SHOW) { case Data.STAT_QUESTION: holder.question.setText(cs); holder.answer.setText(""); break; case Data.STAT_ANSWER: holder.question.setText(""); holder.answer.setText(data.answer); break; case Data.STAT_SHOW: holder.question.setText(cs); holder.answer.setText(data.answer); break; default: holder.question.setText(""); holder.answer.setText(""); break; } // アダプタからロングクリックイベントを送信できないためIDで識別 // クリック用イベントリスナ設定 holder.level.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((ListView) parent).performItemClick(v, position, Common.ITEM_CLICK); } }); // ロングクリック用イベントリスナ設定 holder.level.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { ((ListView) parent).performItemClick(v, position, Common.ITEM_LONG_CLICK); return true; } }); } return view; } }