制作自定义微调器,我想从Web异步检索图像和json。我发现了一个库来帮助它,loopj,并且它工作得很好,但是当我尝试将它放在我的Adapter类中时,它不喜欢“findViewById”,因为我没有扩展Activity,但我已经扩展了ArrayAdapter。有没有办法延长两者?我不完全理解延伸,所以我道歉,如果这是一个愚蠢的问题,但我怎么能解决我的问题?而不是硬编码图像,我宁愿能够从网上导入它们。
我的问题出在“SmartViewImage image = ...”代码中。我不知道如何解决这个问题,仍然能够异步地做我想要的。我也想要检索文本,所以我有点卡在这一点上。任何帮助表示赞赏。
public class CustomAdapter extends ArrayAdapter<String>{
private Activity activity;
private ArrayList data;
public Resources res;
SpinnerModel tempValues=null;
LayoutInflater inflater;
/************* CustomAdapter Constructor *****************/
public CustomAdapter(
MainActivity activitySpinner,
int textViewResourceId,
ArrayList objects,
Resources resLocal
)
{
super(activitySpinner, textViewResourceId, objects);
/********** Take passed values **********/
activity = activitySpinner;
data = objects;
res = resLocal;
/*********** Layout inflator to call external xml layout () **********************/
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getDropDownView(int position, View convertView,ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
/********** Inflate spinner_rows.xml file for each row ( Defined below ) ************/
View row = inflater.inflate(R.layout.spinner_rows, parent, false);
/***** Get each Model object from Arraylist ********/
tempValues = null;
tempValues = (SpinnerModel) data.get(position);
TextView label = (TextView)row.findViewById(R.id.course);
TextView sub = (TextView)row.findViewById(R.id.sub);
ImageView companyLogo = (ImageView)row.findViewById(R.id.image);
SmartImageView image = (SmartImageView)
findViewById(R.id.my_image);
if(position==0){
// Default selected Spinner item
label.setText("Please select course");
sub.setText("");
}
else
{
// Set values for spinner each row
label.setText(tempValues.getCourseName());
sub.setText(tempValues.getCourseShortDesc());
companyLogo.setImageResource(res.getIdentifier("com.androidexample.customspinner:drawable/"+tempValues.getImage(),null,null)); //line that gets image//////
image.setImageUrl("http://iam.colum.edu/students/jordan.max/poker.png");
}
return row;
}
}
答案 0 :(得分:3)
您的适配器中已有activity
字段,请使用此字段:
SmartImageView image = (SmartImageView)
activity.findViewById(R.id.my_image);
但是,正如我所见,你没有将activity
设置为任何东西,你可以(我想)在你的构造函数中使用activity = activitySpinner;
。
此外,如果您的CustomAdapter是MainActivity的内部,那么您只需使用MainActivity.this
。
Java不支持多重继承,因此您无法从两个类扩展。
答案 1 :(得分:1)
抱歉,但java不允许多重继承。因此,您无法使您的CustomAdapter扩展ArrayAdapter和Activity。有一个有趣的discussion about that here所以你需要找到另一种方法