ArrayAdapter <T>を使用して、複数項目の行レイアウトを表示する必要があるのは初めてです。さまざまなアダプターでうまくいくと、これが私を狂ってしまう。どのように複雑なレイアウトでArrayAdapter <T>を使用しますか?
getView(...、position、...)は常に0-7 [EDIT]を返しますので、ArrayList内の> 7 [/ EDIT]にある要素は表示されません。私は知っている、これは目に見える位置ですが、どのようにArrayList内の正しいオブジェクトを選択するのですか?
EDIT:現在のところ、配列の最初の8つの要素は、配列の0から7までしかないため、配列要素の50個の要素でも取得できます。私は "実際の"位置なしでArrayList内に配置する方法を見ていない。
ドキュメントは次のように言っていますが、私はそれを理解しません。誰かが複雑なレイアウトを持つArrayAdapter <T>を正常に実装しましたか?ドクッとは何を意味し、どのように実装すればよいですか?
あなたは、より複雑な レイアウトを使用したい場合は、また は、フィールドIDを取るコンストラクタを使用しています。そのフィールドIDは より大きい レイアウトリソースのTextViewを参照する必要があります。ただし、TextView が参照されると、 配列内の各オブジェクトのtoString()が で埋められます。 カスタムオブジェクトのリストまたは配列を追加できます。オブジェクトの のtoString()メソッドをオーバーライドして リストに表示されるテキストを決定します。 例えば、 配列の表示のためにTextViews以外 ものを使用 ImageViews、またはのtoString以外のデータ のいくつかを持っている()の結果は 意見を記入し、型を返すためにgetViewメソッド(int型、ビュー、 のViewGroup)を上書きするにはビュー が必要です。事前に
感謝
hjw
ここでのコードは、これまでのところです:
public class HappyAdapter extends ArrayAdapter<Happy> {
static class ViewHolder {
private ImageView imageView;
private TextView textViewBottom;
private TextView textViewTop;
}
private ArrayList<Happy> arrayListHappy;
private DrawableCache drawableCache = DrawableCache.getInstance();
private int layout;
@Override
public int getCount() {
return arrayListHappy.size();
}
@Override
public View getView(int position, View contentView, ViewGroup viewGroup) {
// position always 0-7
View view = null;
ViewHolder viewHolder = null;
if (contentView == null) {
LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(layout, null);
if (view != null) {
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) view.findViewById(R.id.happyactivity_row_image_left);
viewHolder.textViewBottom = (TextView) view.findViewById(R.id.happyactivity_row_text_bottom);
viewHolder.textViewTop = (TextView) view.findViewById(R.id.happyactivity_row_text_top);
view.setTag(viewHolder);
}
} else {
view = contentView;
viewHolder = (ViewHolder) contentView.getTag();
}
if (viewHolder != null) {
Happy happy = arrayListHappy.get(position);
if (happy != null) {
viewHolder.imageView.setUrl(happy.getImageThumbnail());
drawableCache.fetchDrawable(happy.getImageThumbnail(), viewHolder.imageView);
viewHolder.textViewBottom.setText(String.valueOf(position));
viewHolder.textViewTop.setText(String.valueOf(viewHolder.position));
}
}
return view;
}
public HappyAdapter(Context context, int layout, ArrayList<Happy> arrayListHappy) {
super(context, layout, arrayListHappy);
this.arrayListHappy = arrayListHappy;
this.layout = layout;
}
}
これが行レイアウトの一部です:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/happyactivity_row_image_left"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="fill_parent" />
<TextView
style="@style/TextViewStandard"
android:id="@+id/happyactivity_row_text_top"
android:layout_weight="1" />
<TextView
style="@style/TextViewStandard"
android:id="@+id/happyactivity_row_text_bottom"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
どの部分が機能していませんか? – CaseyB
より大きい場合でも、私はArrayListから要素0-7を見るだけです。私は元の投稿にその部分を編集しました。 –