android - 无法从 View 转换为相对布局

标签 android json android-asynctask hashmap imageview

我试图解决我遇到的以下问题 - 无法从 View 转换为相对布局。简而言之,我试图为从 JSON 数据生成的每个项目 ListView 数组提供背景图像。我已经在 J​​SON 中设置了背景图片的 url。 JSON 函数已经配置好,因此我已经能够从在线源将数据填充到应用程序中。

我认为问题在于这些行

 View itemView = inflater.inflate(R.layout.listview_item, parent, false);
        RelativeLayout rootRelativeLayout=itemView.findViewById(R.id.rootRelativeLayout);

        new ImageDownloadTask(rootRelativeLayout,"http://dooba.ca/analytics/ed.php").execute()

;

完整代码如下

import java.util.ArrayList;
import java.util.HashMap;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {

    // Declare Variables

    Context context;
    LayoutInflater inflater;
    ArrayList<HashMap<String, String>> data;
    ImageLoader imageLoader;
    HashMap<String, String> resultp = new HashMap<String, String>();

    public ListViewAdapter(Context context,
            ArrayList<HashMap<String, String>> arraylist) {
        this.context = context;
        data = arraylist;
        imageLoader = new ImageLoader(context);
    }

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

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

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

    public View getView(final int position, View convertView, ViewGroup parent) {
        // Declare Variables
        TextView list_item_name;
        TextView country;
        TextView list_item_price;
        ImageView list_item_bac;

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.listview_item, parent, false);
        RelativeLayout rootRelativeLayout=itemView.findViewById(R.id.rootRelativeLayout);

        new ImageDownloadTask(rootRelativeLayout,"http://dooba.ca/analytics/ed.php").execute();
        //rootRelativeLayout.setBackground(null);
        // Get the position
        resultp = data.get(position);

        // Locate the TextViews in listview_item.xml
        list_item_name = (TextView) itemView.findViewById(R.id.list_item_name);
        country = (TextView) itemView.findViewById(R.id.country);
        list_item_price = (TextView) itemView.findViewById(R.id.list_item_price);

        // Locate the ImageView in listview_item.xml
        list_item_bac = (ImageView) itemView.findViewById(R.id.list_item_bac);

        // Capture position and set results to the TextViews
        list_item_name.setText(resultp.get(MainActivity.LIST_ITEM_NAME));
        country.setText(resultp.get(MainActivity.COUNTRY));
        list_item_price.setText(resultp.get(MainActivity.LIST_ITEM_PRICE));
        // Capture position and set results to the ImageView
        // Passes flag images URL into ImageLoader.class
        imageLoader.DisplayImage(resultp.get(MainActivity.LIST_ITEM_BAC), list_item_bac);
        // Capture ListView item click
        itemView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Get the position
                resultp = data.get(position);
                Intent intent = new Intent(context, SingleItemView.class);

                intent.putExtra("list_item_name", resultp.get(MainActivity.LIST_ITEM_NAME));

                intent.putExtra("country", resultp.get(MainActivity.COUNTRY));

                intent.putExtra("list_item_price",resultp.get(MainActivity.LIST_ITEM_PRICE));

                intent.putExtra("list_item_bac", resultp.get(MainActivity.LIST_ITEM_BAC));
                // Start SingleItemView Class
                context.startActivity(intent);

            }
        });
        return itemView;
    }
    AsyncTask<View,View,View> mytask= new AsyncTask<View,View,View>() {

        @Override
        protected View doInBackground(View... params) {
                    Bitmap img = imageLoader.loadImageSync(list_item_bac);

            return null;
        }
    };

    class ImageDownloadTask extends AsyncTask<View, View, View>
    {
        RelativeLayout mrelativelayout;
        String downloadUrl;
         Bitmap img;
        public ImageDownloadTask(RelativeLayout layout,String url)
        {

            mrelativelayout=layout;
            downloadUrl=url;
        }
        @Override
        protected View doInBackground(View... params) {
            // TODO Auto-generated method stub
            img = imageLoader.loadImageSync(downloadUrl);
            return null;
        }
          protected void onPostExecute(Void result) {
                Drawable d = new BitmapDrawable(context.getResources(), img);
                mrelativelayout.setBackground(d);
            }
    }
    }

在此先感谢您的支持

最佳答案

更改为:

RelativeLayout rootRelativeLayout=(RelativeLayout)itemView.findViewById(R.id.rootRelativeLayout);

关于android - 无法从 View 转换为相对布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24871151/

相关文章:

java - 如何在 Kotlin 中解析 Volley 中来自服务器的错误

android - MotionEvent.ACTION_DOWN 没有被调用,即使我为它返回 true

c# - PowerShell 二进制模块程序集依赖性错误

android - Android 应用程序中的预加载数据库损坏问题

android - 使用 dialogFragment 自定义进度条对话框

java - 使 Asynctask 返回 Cursor

java - 即使使用更新的 gradle 文件,也无法解析符号 'firebase'

javascript - Json 排序不起作用

arrays - Zapier Webhooks 发布 Json 数组

android - 在 IntelliJ 中运行 RoboElectric 2 测试的仪器错误