java - 使用 ArrayAdapter 包含来自 JSON 的图像和文本的 ListView

标签 java android json

我知道从以下位置获取ListItem:

string[] = {"data1","data","data3"};

但是如何从 JSON 响应中获取它?我将数据移至:

ArrayList<HashMap<String, String>>

我的代码如下,我必须使用 JSON 而不是获取 String[],因为我的 JSON 响应包含 ID、标题和图像链接。

public class MainActivity extends AppCompatActivity {

    String[] titles,header;
    ListView list1;
    int[] img;
    String[] title;
    int[] img = {R.drawable.img1, R.drawable.img2,R.drawable.img3};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list1 = (ListView) findViewById(R.id.list);


        title ={"data1","data2","data3"}

        myAdapter adapter = new myAdapter(getApplicationContext(), titles, img);


        list1.setAdapter(adapter);

    }

    class myAdapter extends ArrayAdapter<String> {
        Context context;
        int[] imgs;
        String[] titles;


        private ArrayList<String> mData = new ArrayList<>();
        private ArrayList<Integer> mImage = new ArrayList<>();
        private TreeSet<Integer> sectionHeader = new TreeSet<Integer>();
        private LayoutInflater mInflater;

        myAdapter(Context context, String[] titles, int imgs[]) {
            super(context, R.layout.list_item, R.id.text, titles);
            this.context = context;
            this.imgs = imgs;
            this.titles = titles;
            mInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }


        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            int rowType = getItemViewType(position);

            if (convertView == null) {
                holder = new ViewHolder();

                        convertView = mInflater.inflate(R.layout.list_item, parent, false);

                        holder.myImage = (ImageView) convertView.findViewById(R.id.image);

                        holder.myText = (TextView) convertView.findViewById(R.id.texttitle);


                        Picasso.with(context)
                                .load(imgs[position])
                                .fit()
                                .into(holder.myImage);

                        holder.myText.setText(titles[position]);
                        convertView.setTag(holder.myImage);



            return convertView;
        }

        public class ViewHolder {
            public TextView myText;
            public ImageView myImage;
        }

    }


}

最佳答案

首先将上面的代码更改如下,以便您可以正确地看到图像和字符串列表:

public class MainActivity extends AppCompatActivity {

ListView list1;
String[] title = {"data1", "data2", "data3"};
;
int[] img = {R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    list1 = (ListView) findViewById(R.id.list);


    myAdapter adapter = new myAdapter(getApplicationContext(), title, img);


    list1.setAdapter(adapter);

  }
}

class myAdapter extends ArrayAdapter<String> {
Context context;
int[] imgs;
String[] titles;


private ArrayList<String> mData = new ArrayList<>();
private ArrayList<Integer> mImage = new ArrayList<>();
private TreeSet<Integer> sectionHeader = new TreeSet<Integer>();
private LayoutInflater mInflater;

myAdapter(Context context, String[] titles, int imgs[]) {
    super(context, R.layout.list_item, R.id.text, titles);
    this.context = context;
    this.imgs = imgs;
    this.titles = titles;
    mInflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}


public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    int rowType = getItemViewType(position);

    if (convertView == null) {
        holder = new ViewHolder();

        convertView = mInflater.inflate(R.layout.list_item, parent, false);

        holder.myImage = (ImageView) convertView.findViewById(R.id.image);

        holder.myText = (TextView) convertView.findViewById(R.id.texttitle);

        holder.myImage.setImageResource(imgs[position]);


   //            Picasso.with(context)
   //                    .load(imgs[position])
   //                    .fit()
   //                    .into(holder.myImage);

        holder.myText.setText(titles[position]);
        convertView.setTag(holder.myImage);


    }
    return convertView;

}

  public class ViewHolder {
    public TextView myText;
    public ImageView myImage;
  }
}

关于java - 使用 ArrayAdapter 包含来自 JSON 的图像和文本的 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38090491/

相关文章:

android - 先前手动安装的应用程序从Market安装

android - 暂时禁用自由驾驶/导航中的缩放级别配置

java - 使用 Jackson 使用循环创建 Json 字符串

java - Gwt + Maven + Idea,项目编译器输出设置

java - 如何对编号的行进行排序? java

javascript - 将 CSS 规则注入(inject) Android 浏览器中的页面

Python JSON解析器错误: json.解码器.JSONDecodeError:期望值:第1行第1列(字符0)

javascript - AngularJS:在 Controller 中读取 JSON

java - 安卓逐帧动态壁纸动画

java - 使用 Maven 将测试项目和核心项目分开