需要修复我的适配器以在ListView中显示图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要修复我的适配器以在ListView中显示图像相关的知识,希望对你有一定的参考价值。

android studio和java的新手。只是从这里和那里学习。

以前我在这里提出过请求,但每个人都回答了一个参考。你知道从一个新学习者的参考文献中很难理解。

我试图加载与毕加索的listview图像,但与适配器搞砸了。我需要的是修复我的适配器。

其中一个TABS的代码:

public class FinTab extends Fragment {
    ListView installs;
    ImageView image;
    static final String url = "http://192.168.5.2/test.php";
    ProgressBar dialog;
    private SimpleAdapter tva;

    static final String NAME = "name";
    static final String TASK = "task";
    static final String DESC = "desc";
    static final String MURL = "murl";


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.Fin_tab, container, false);


        installs = rootView.findViewById(R.id.install_list);
        image = rootView.findViewById(R.id.imgs);

        dialog = new ProgressBar(getActivity().getApplicationContext());
        dialog.setVisibility(View.VISIBLE);

        StringRequest request = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String string) {
                // parseJsonData(string);
                //start
                try {
                    JSONObject object = new JSONObject(string);
                    JSONArray offers = object.optJSONArray("lists");
                    ArrayList<HashMap<String, String>> list = new ArrayList<>();

                    HashMap<String, String> item;
                    for(int i = 0; i < offers.length(); i++) {
                        JSONObject jsonChildNode = offers.getJSONObject(i);
                        item = new HashMap<>();
                        item.put(NAME, jsonChildNode.optString("name"));
                        item.put(TASK, jsonChildNode.optString("tasker"));
                        item.put(DESC, jsonChildNode.optString("descript"));
                        item.put(MURL, jsonChildNode.optString("picture"));
                        //String imageUrl = jsonChildNode.optString("picture");
                        //Picasso.with(getActivity()).load(imageUrl).into(image);

                        list.add(item);
                    }
                    tva = new MyAdapter(getActivity(), list,
                            R.layout.fin_item,
                            new String[]{NAME, TASK, DESC, MURL},
                            new int[]{R.id.line_a, R.id.line_b, R.id.line_c, R.id.imgs});
                    installs.setAdapter(tva);

                } catch (JSONException e) {
                    e.printStackTrace();
                }

                dialog.setVisibility(View.GONE);
                //end

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(getActivity().getApplicationContext(), "Some error occurred!!", Toast.LENGTH_SHORT).show();
                dialog.setVisibility(View.GONE);
            }
        });

        RequestQueue rQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
        rQueue.add(request);

        return rootView;

    }

}

搞砸适配器:

public class MyAdapter extends SimpleAdapter {

    public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
        super(context, data, resource, from, to);
    }

    public View getView(int position, View convertView, ViewGroup parent){

        View v = super.getView(position, convertView, parent);

        ImageView img = (ImageView) v.getTag();
        if(img == null){
            img = (ImageView) v.findViewById(R.id.imgs);
            v.setTag(img);
        }

        String url = ((Map)getItem(position)).get(FinTab.MURL);

        Picasso.with(v.getContext()).load(url).into(img);


        return v;
    }
}

它包括在内

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.finetcity.fins">

    <ListView
        android:id="@+id/install_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

fin_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/line_a"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="22sp"
        android:textStyle="italic" />

    <TextView
        android:id="@+id/line_b"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="14sp" />
    <TextView
        android:id="@+id/line_c"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="14sp" />
    <TextView
        android:id="@+id/line_d"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="14sp" />
    <ImageView
        android:id="@+id/imgs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:background="#000000"
        android:padding="1dp" />
</LinearLayout>

错误:在String url = ((Map)getItem(position)).get(FinTab.MURL);上要求:java.lang.String发现:java.lang.Object

请帮帮我。

答案

试试这个

String url = ((Map)getItem(position)).get(FinTab.MURL).toString();

(要么)

String url = String.valueOf(((Map)getItem(position)).get(FinTab.MURL));

如果你使用Android工作室,你可以点击任何带下划线的符号,几秒后你可能会看到显示红色感叹号,点击它,IDE建议你解决问题。

以上是关于需要修复我的适配器以在ListView中显示图像的主要内容,如果未能解决你的问题,请参考以下文章

自定义ListView,文本和图像未显示在“活动”中

android listview 适配器 asynctask 图像加载

Android listview 项目使用数组适配器在图像上显示文本

如何从 listVIew 获取图像 id

单击列表视图项

ListView自定义适配器,包括库中的图像