2012-08-19 3 views
0

Я пытаюсь вызвать конструктор LazyAdapter для установки ListView. И я всегда вижу red line на new 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 И конструктор что-то вроде this-

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

Update: -

Мой 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; 
    } 
} 
+0

Я понял это, мне нужно заменить это на 'Class_activity_name.this' – ferhan

ответ

1

Проблема заключается в том, что вы инициализацию Adapter внутри AsyncTask метода, поэтому во время инициализации this указует на AsyncTask экземпляра. Если AsyncTask является внутренним классом Activity, то вы можете просто изменить на Activity.this, иначе вам необходимо передать Activity в конструктор AsyncTask и использовать его для инициализации вашего Adapter. Надеюсь это поможет.

+0

Yup Я понял, что через некоторое время я пропал без вести. Спасибо за помощь. – ferhan

+0

@TechGeeky, добро пожаловать! – Egor

0

Это происходит потому, что переменная this не является будучи признанным редактором. Попробуйте использовать getBaseContext().

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

Надеется, что это помогает ...

+0

Я уже пробовал использовать вышеприведенную вещь. Всякий раз, когда я пытаюсь использовать 'getBaseContext()', я всегда получаю как 'Конструктор LazyAdapter (Context, String []) не определен'. В моем вопросе я уже предоставил конструктор LazyAdapter. – ferhan

0

Когда вы вызываете AsyncTask, создать конструктор AsyncTask и передать вашу ссылку деятельности (это), чтобы AsyncTask как это:

AsyncTaskClass obj = AsyncTaskClass(this); 

Конструктора:

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

И использовать этот конструктор в onPostExecute() вашего AsynTask.

Смежные вопросы