0

LazyAdapterを設定するためにコンストラクターを呼び出そうとしていListViewます。そして、私はいつもこれを解決するようred linenew LazyAdapter(this, mStrings);求めています。動作を開始できるように、これの代わりに何を追加すればよいかわかりません。これを置き換えようとするとgetApplicationContext、常にエラーが発生しClassCastExceptionます。の代わりに追加する必要があるものはありthisますか?

@Override
protected void onPostExecute(ArrayList<User> response) {

    if (response!=null) {
           adapter=new LazyAdapter(this, mStrings);
           listView.setAdapter(adapter);
    }

for(User user : response){
 //Doing Some Stuff Here    

}

}

そして、LazyAdapterコンストラクターはこのようなものです-

public LazyAdapter(Activity a, String[] d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }

アップデート:-

私のLazyAdapterの完全なコード -

public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public LazyAdapter(Activity a, String[] d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.length;
    }

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.item, null);

        TextView text=(TextView)vi.findViewById(R.id.text);;
        ImageView image=(ImageView)vi.findViewById(R.id.image);
        text.setText("item "+position);
        imageLoader.DisplayImage(data[position], image);
        return vi;
    }
}
4

3 に答える 3

1

問題はAdapter、メソッド内で初期化してAsyncTaskいるため、初期化時にインスタンスthisを指すことです。が の内部クラスであるAsyncTask場合は、単純にに変更できます。それ以外の場合は、 をコンストラクターに渡し、それを使用して を初期化する必要があります。お役に立てれば。AsyncTaskActivitythisActivity.thisActivityAsyncTaskAdapter

于 2012-08-19T06:17:59.940 に答える
0

これは、this変数がエディターによって認識されていないために発生しています。を使ってみてくださいgetBaseContext()

adapter=new LazyAdapter(getBaseContext(), mStrings);

お役に立てれば...

于 2012-08-19T06:06:29.550 に答える
0

AsyncTask を呼び出すときは、AsyncTask のコンストラクターを作成し、アクティビティ参照 (this) をAsyncTask次のように渡します。

AsyncTaskClass obj = AsyncTaskClass(this);

コンストラクタ:

public AsyncTaskClass(Context context) {
          mContext = context;
}

そして、このコンストラクターをonPostExecute()AsynTask で使用します。

于 2012-08-19T06:18:52.193 に答える