0

リストサイズの取得は46です.constrator内のすべての値を取得しています。getView は呼び出していません。

以下の私のコード、

  public class Atom_1_Adapter extends BaseAdapter {

                private Activity activity;
                    List<MsgStandard> msgList1=new ArrayList<MsgStandard>();
                private LayoutInflater inflater=null;
                ImageLoader imageLoader;    
                int size=0;
                String tag="Atom_1_Adapter";

            public Atom_1_Adapter(Activity activity, List<MsgStandard> msgList1) {
                    this.activity = activity;
  this.msgList1 = msgList1
                    size=this.msgList1.size();
                    inflater = (LayoutInflater)this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    imageLoader=new ImageLoader(activity);
                }

        @Override
            public int getCount() {
                return size;
            }

            @Override
            public Object getItem(int position) {
                return position;
            }

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

        class ViewHolder{
                ImageView image1,image2;
        }
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                System.out.println("enter get view--->>>>>>");
                View vi=convertView;
                ViewHolder holder=new ViewHolder();
                try{
                    vi=inflater.inflate(R.layout.homepagelist_1_adapter,null);

        //here my layout declaration


        vi.setTag(holder);

        //here set value for TextView,ImageView... etc

        return vi;

        }catch{}
        }
        }

ありがとう、

4

2 に答える 2

1

これを試して。

コンストラクタ コードを変更します。

public Atom_1_Adapter(Activity activity, List<MsgStandard> msgList1) 
{
   this.activity = activity;
   this.msgList1 = msgList1
   size=this.msgList1.size();
   inflater = (LayoutInflater)this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   imageLoader=new ImageLoader(activity);
}

注 : this.msgList1.size() は、アダプタ クラスで宣言するクラス変数と見なされます。したがって、関数に渡される List のサイズを知りたい場合は、コンストラクターで msgList1.size() の前にこれを削除する必要があります。そして割り当てthis.msgList1 = msgList1;ます。私のコードを見て

public View getView(int position, View convertView, ViewGroup parent) 
{
    ViewHolder holder;

    if (convertView == null) 
    {
        convertView = mInflater.inflate(R.layout.menu_row, null);
        holder = new ViewHolder();

        holder.textViewMenuName = (TextView)convertView.findViewById(R.id.textViewMenuName);
        convertView.setTag(holder);
    }
    else 
    {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.textViewMenuName.setText("Test");
            return convertView;
}
于 2012-08-24T10:10:49.263 に答える
0

クラスには、次のフィールドがあります。

List<MsgStandard> msgList1=new ArrayList<MsgStandard>();

Listここで、コンストラクターは同じ名前の type の引数も受け取ります。msgList1

問題は、コンストラクターで次の行を呼び出していることです

size=this.msgList1.size();

キーワードthisは現在のオブジェクトを参照するため、msgList1コンストラクター パラメーターではなく、メンバー フィールドを参照します。

msgList1メンバー フィールドにはまだ値がないため、メソッドは 0 を返します。size()その結果、getCount()メソッドが呼び出されると 0 が返され、アダプターは配列に要素がないと見なします。

したがって、これを修正するには、コンストラクターでこのキーワードを削除し、コンストラクター パラメーターを参照する必要があります。

size=msgList1.size();

また、コンストラクターにもう 1 行追加し、コンストラクターからのリストをクラス メンバーに割り当てる必要があります。

this.msgList1 = msgList1;
于 2012-08-24T10:26:17.250 に答える