4

リストビューのすべての行に N 個のイメージビューを表示したい。imageview の数は、json 解析値に依存します。サーバーからjsonをフェッチするたびに、2または3または4になる可能性があります。

inflate.soを使用して静的xmlを使用できないため、getviewメソッドで動的ビューを作成し、N個のimageviewをビューに追加することにしました

私は次のコードを書きますが、まだ1つのイメージビューしか表示せず、水平スクロールはまったく機能しません..

どんな助けでも大歓迎です

public class MyAdapter extends BaseAdapter{
private LayoutInflater inflater;
private ArrayList<String> data;
Context con;

public MyAdapter(Context context, ArrayList<String> data1){
// Caches the LayoutInflater for quicker use
      inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Sets the events data
data= data1;
con=context;
}

public View getView(int position, View view, ViewGroup viewgroup) {
    ViewHolder holder=new ViewHolder(); //our view holder of the row
    if (view == null) {

        HorizontalScrollView hr=new HorizontalScrollView(con);
        LinearLayout layout=new LinearLayout(con);
        layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

           //layout set some properties
           for(int i=1;i<2;i++)
           {
            holder.image =new ImageView(con);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100*i, 100*i);
            holder.image.setLayoutParams(layoutParams);
            layout.addView(holder.image);
           }
           //subtitle set some properties

       //CREATING THE LAYOUT THROUGH CODE
           hr.addView(layout);

       view = hr; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT 
       //bind the views of the holder to the views of the layout
           view.setTag(holder);
           Log.w("myapp", "new view");
    } 
    else 
    {
       holder = (ViewHolder) view.getTag();
       Log.w("myapp", "in reuse");
    }
        //rest of implementation of the View
    for(int i=0;i<2;i++)
    {
    holder.image.setImageResource(R.drawable.ic_launcher);
    }
        return view;
    }

static class ViewHolder {
    ImageView image;
 TextView title;
 TextView type;
 HorizontalScrollView hr;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 4;
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 1;
}
 }
4

3 に答える 3

7

これがあなたが望むものであることを確認してください。画像の各行にランダムな値を設定するだけです

    public class MyAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private ArrayList<String> data;
    Context con;

    public MyAdapter(Context context, ArrayList<String> data1) {

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        data = data1;
        con = context;
    }

    public View getView(int position, View view, ViewGroup viewgroup) {
        ViewHolder holder = new ViewHolder(); // our view holder of the row
        if (view == null) {

            HorizontalScrollView hr = new HorizontalScrollView(con);
            LinearLayout layout = new LinearLayout(con);
            layout.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            for (int i = 0; i < data.size(); i++) {
                holder.image = new ImageView(con);
                layout.addView(holder.image);
                holder.image.setImageResource(R.drawable.ic_launcher);
            }
            hr.addView(layout);
            view = hr;

            view.setTag(holder);

        }
        holder = (ViewHolder) view.getTag();

        return view;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 1;
    }
}

class ViewHolder {
    ImageView image;
    TextView title;
    TextView type;
    HorizontalScrollView hr;
}
于 2013-06-28T12:08:32.313 に答える
0

xml レイアウトからビュー アイテムをインフレートするのと同じ方法で、通常どおりプログラムでそれらを作成できます。レイアウト パラメータを指定してレイアウトに追加し、それらが表示されるようにする必要があります。

たとえば、ViewHolder の初期化でリンクされたビューを取得します。

//That's a view taken from the xml
EditText editText = (EditText) view.findViewById(R.id.YOUR_EditText1);

同様に、ビューをレイアウトに動的に追加する場合は、getView() メソッドで次のようにします。

ImageView image1 = new ImageView();
...
...
view.addView(image1);

プログラムでビューを追加する詳細については、Android を確認してください: プログラムで 2 つのテキスト ビューを追加します。

于 2013-06-28T11:54:52.143 に答える