如果已经扩展了其他东西,有什么方法来扩展Activity?

时间:2014-03-01 21:59:46

标签: java android android-activity custom-adapter

制作自定义微调器,我想从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;
      }
}

2 个答案:

答案 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所以你需要找到另一种方法