0

こんにちは、私のアプリケーションでは、複数列のリストビュー (リストには 3 つの列がありました) を表示していますが、私のアプリケーションでは、すべての列に同じ値が表示されています。私のリストビューのレイアウトは次のようなものです:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingBottom="5dip"
android:paddingLeft="5dip"
android:paddingTop="5dip" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="3" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="2dip"
        android:layout_weight="1"
        android:background="@drawable/listbackground"
        android:gravity="center"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/Name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#C20000"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/ltp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal" >

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:src="@drawable/down" />

            <TextView
                android:id="@+id/perChange"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="2dip"
        android:layout_weight="1"
        android:background="@drawable/listbackground"
        android:gravity="center"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/Name1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#C20000"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/ltp1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal" >

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:src="@drawable/down" />

            <TextView
                android:id="@+id/perChange1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="2dip"
        android:layout_weight="1"
        android:background="@drawable/listbackground"
        android:gravity="center"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/Name2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#C20000"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/ltp2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal" >

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:src="@drawable/down" />

            <TextView
                android:id="@+id/perChange2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

     final ListView lv = (ListView) findViewById(R.id.srListView);
    lv.setAdapter(new MyCustomBaseAdapter(this, searchResults));


public class MyCustomBaseAdapter extends BaseAdapter {
    private ArrayList<SearchResults> searchArrayList;

    private LayoutInflater mInflater;

    public MyCustomBaseAdapter(Context context,
            ArrayList<SearchResults> results) {
        searchArrayList = results;
        mInflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return searchArrayList.size();
    }

    public Object getItem(int position) {
        return searchArrayList.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.custom_row_view, null);
            holder = new ViewHolder();
            holder.txtName = (TextView) convertView
                    .findViewById(R.id.Name);
            holder.txtCityState = (TextView) convertView
                    .findViewById(R.id.ltp);
            holder.txtPhone = (TextView) convertView
                    .findViewById(R.id.perChange);

            holder.txtName1 = (TextView) convertView
                    .findViewById(R.id.Name1);
            holder.txtCityState1 = (TextView) convertView
                    .findViewById(R.id.ltp1);
            holder.txtPhone1 = (TextView) convertView
                    .findViewById(R.id.perChange1);

            holder.txtName2 = (TextView) convertView
                    .findViewById(R.id.Name2);
            holder.txtCityState2 = (TextView) convertView
                    .findViewById(R.id.ltp2);
            holder.txtPhone2 = (TextView) convertView
                    .findViewById(R.id.perChange2);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        System.out.println("position::" + position);

        holder.txtName
                .setText(searchArrayList.get(position).getStockCode());
        holder.txtCityState.setText(searchArrayList.get(position).getLtp());
        holder.txtPhone.setText(searchArrayList.get(position)
                .getPerChange());

        holder.txtName1.setText(searchArrayList.get(position)
                .getStockCode());
        holder.txtCityState1
                .setText(searchArrayList.get(position).getLtp());
        holder.txtPhone1.setText(searchArrayList.get(position)
                .getPerChange());

        holder.txtName2.setText(searchArrayList.get(position)
                .getStockCode());
        holder.txtCityState2
                .setText(searchArrayList.get(position).getLtp());
        holder.txtPhone2.setText(searchArrayList.get(position)
                .getPerChange());

        return convertView;
    }

    class ViewHolder {
        TextView txtName;
        TextView txtCityState;
        TextView txtPhone;

        TextView txtName1;
        TextView txtCityState1;
        TextView txtPhone1;

        TextView txtName2;
        TextView txtCityState2;
        TextView txtPhone2;
    }
}

出力が次のように表示されます

ここに画像の説明を入力

ここでは、すべての列に同じデータが表示されていますが、すべての列に異なるデータを表示したいのですが、どうすればよいですか? ヘルプ/提案をいただければ幸いです。よろしくお願いします。

Sam に感謝しますが、Name が大きい場合に問題が発生し、出力が次のようになります。

ここに画像の説明を入力

4

3 に答える 3

1

グリッドビューにある 1 つのボックスで 3 つの行を使用できますか? はいの場合、サンプル/チュートリアルを見せていただけますか。

GridView を使用するように既存のコード例を変更する方法を次に示します。

最初にレイアウトを 1 つのボックスに単純化し、次のように保存しますgrid_item.xml

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="2dip"
    android:layout_marginRight="2dip"
    android:layout_weight="1"
    android:background="@drawable/listbackground"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/Name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#C20000"
        android:textSize="14sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/ltp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/perChange"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/down" />

</LinearLayout>

(最後の TextView と ImageView を結合したことに注意してください。これを調整する必要がある場合があります。)

次にgetView、メソッドを単純化します。

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        // Change the layout that is loaded
        convertView = mInflater.inflate(R.layout.grid_item, null);
        holder = new ViewHolder();
        holder.txtName = (TextView) convertView
                .findViewById(R.id.Name);
        holder.txtCityState = (TextView) convertView
                .findViewById(R.id.ltp);
        holder.txtPhone = (TextView) convertView
                .findViewById(R.id.perChange);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    System.out.println("position::" + position);

    SearchResult result = searchArrayList.get(position);
    holder.txtName.setText(result.getStockCode());
    holder.txtCityState.setText(result.getLtp());
    holder.txtPhone.setText(result.getPerChange());
    return convertView;
}

class ViewHolder {
    TextView txtName;
    TextView txtCityState;
    TextView txtPhone;
}

これらの参照 (およびその他の参照) を最後に変更します。

final GridView gv = (GridView) findViewById(R.id.srGridView);
gv.setAdapter(new MyCustomBaseAdapter(this, searchResults));
于 2012-10-30T17:46:00.060 に答える
0

getが問題のようです。

holder.txtName2.setText(searchArrayList.get(position)
                .getStockCode());
        holder.txtCityState2
                .setText(searchArrayList.get(position).getLtp());
        holder.txtPhone2.setText(searchArrayList.get(position)
                .getPerChange());

holder.txtName1.setText(searchArrayList.get(position)
                .getStockCode());

getでデバッグ/ブレークポイントを実行します。コードは、各行の3つのボックスで「位置」intが同じになることを意味すると思います。したがって、同じデータを返し、それをその行の各ボックスに配置します。これは、重複があることを意味します。

あなたは次のようなことをしたいと思うでしょう

 holder.txtName2.setText(searchArrayList.get(position)
                    .getStockCode());
            holder.txtCityState2
                    .setText(searchArrayList.get(position).getLtp());
            holder.txtPhone2.setText(searchArrayList.get(position)
                    .getPerChange());

    holder.txtName1.setText(searchArrayList.get(position+column2dataoffset)
                    .getStockCode());

しかし、私はコメントに同意します、グリッドレイアウトはより良いでしょう。

于 2012-10-30T17:32:42.233 に答える
0

既存のコードでこのコードを試してみてください...

if((position * 3) <= getCount()){
    holder.txtName
            .setText(searchArrayList.get(position * 3).getStockCode());
    holder.txtCityState.setText(searchArrayList.get(position * 3).getLtp());
    holder.txtPhone.setText(searchArrayList.get(position * 3)
            .getPerChange());
}

if(((position * 3) + 1) <= getCount()){
    holder.txtName1.setText(searchArrayList.get((position * 3) + 1)
            .getStockCode());
    holder.txtCityState1
            .setText(searchArrayList.get((position * 3) + 1).getLtp());
    holder.txtPhone1.setText(searchArrayList.get((position * 3) + 1)
            .getPerChange());
}

if(((position * 3) + 2) <= getCount()){
    holder.txtName2.setText(searchArrayList.get((position * 3) + 2)
            .getStockCode());
    holder.txtCityState2
            .setText(searchArrayList.get((position * 3) + 2).getLtp());
    holder.txtPhone2.setText(searchArrayList.get((position * 3) + 2)
            .getPerChange());
}
于 2012-10-30T18:01:37.947 に答える