Android ArrayAdapter自定义布局问题

时间:2019-10-14 07:30:32

标签: java android listview android-arrayadapter

我是android编程的新手。面临一个无法通过大量搜索解决的问题。 我正在尝试从我的wordpress网站获取Json数据,并将其放入一个简单的android应用中。

当我得到一个参数(如帖子标题)并通过listView显示它时,它就起作用了。但是,当我尝试获取10个最新帖子的标题,图像和摘录并将它们显示在listView中时,似乎有点复杂。

如何获取10个最新帖子的标题和照片,并在android上显示它们? 到目前为止,我可以编写以下代码:

mainActivity.java

package com.example.test1;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import android.app.ProgressDialog;
import android.content.Intent;
//import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;

import java.util.List;
import java.util.Map;

public class MainActivity extends ListActivity {

    String url = "http://www.example.com/wp-json/wp/v2/posts";
    List<Object> list;
    Gson gson;
    ProgressDialog progressDialog;
    // ListView postList;
    Map<String, Object> mapPost;
    Map<String, Object> mapTitle;
    int postID;
    String postTitle[];
    String image[];


    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView ( R.layout.activity_main );

        progressDialog = new ProgressDialog ( MainActivity.this );
        progressDialog.setMessage ( "Loading..." );
        progressDialog.setProgressStyle ( ProgressDialog.STYLE_SPINNER );
        progressDialog.show ();

        StringRequest request = new StringRequest ( Request.Method.GET, url, new Response.Listener<String> () {
            @Override
            public void onResponse(String s) {
                gson = new Gson ();
                list = (List) gson.fromJson ( s, List.class );
                postTitle = new String[list.size ()];
                image = new String[list.size ()];

                for (int i = 0; i < list.size (); ++i) {
                    mapPost = (Map<String, Object>) list.get ( i );
                    mapTitle = (Map<String, Object>) mapPost.get ( "title" );
                    postTitle[i] = (String) mapTitle.get ( "rendered" );
                    image[i] = (String) mapPost.get ( "poster_big" );
                }

                // the following line display error
                // error : in picture
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_main, R.id.label, image);
                setListAdapter(adapter);


            }

         }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    Toast.makeText(MainActivity.this, "Some error occurred", Toast.LENGTH_LONG).show();
                }
        });



    }
}

main_activity.xml

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

    <ImageView
        android:id="@+id/icon"
        android:layout_width="136dp"
        android:layout_height="139dp"
        android:layout_marginLeft="4px"
        android:layout_marginTop="4px"
        android:layout_marginRight="10px"
        android:src="@drawable/ic_launcher"></ImageView>

    <TextView
        android:id="@+id/label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World"
        android:textSize="20px"></TextView>

</LinearLayout>

这是来自Android Studio的错误: error android studio

谢谢。

1 个答案:

答案 0 :(得分:1)

使用 MainActivity.this 代替 this 。像

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.activity_main, R.id.label, image);

ArrayAdapter<>()构造函数的第一个参数需要Context,但是您已经传递了this,它引用了Object的{​​{1}}。

注意StringRequest始终指this

更新

您应该在inner class响应后关闭progressDialog。像下面一样

API
相关问题