为什么我无法从API更新自定义列表视图?

时间:2017-11-02 18:09:32

标签: android json listview android-volley

我正在尝试使用API​​中的数据填充自定义ListView ..数据显示在列表中,但不是标题和字幕的自定义布局格式,带有图标。它当前显示为两个TextView项目。我想让行名称显示为行标题,行状态显示为行子标题。我们非常感谢正确方向上的一点。请参阅下面的代码。

 public class MainActivity extends AppCompatActivity {

    ListView list;
    String[] titles;
    String [] description;
    int[] imgs = {R.drawable.tube_icon,R.drawable.tube_icon,R.drawable.tube_icon,R.drawable.tube_icon,R.drawable.tube_icon,
            R.drawable.tube_icon,R.drawable.tube_icon,R.drawable.tube_icon,R.drawable.tube_icon,R.drawable.tube_icon,R.drawable.tube_icon,
            R.drawable.tube_icon,R.drawable.tube_icon,R.drawable.tube_icon};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        ////// GET DATA FROM API AND ADDS TO LIST ARRAY


        //list view and arrayList
        final ListView listView = (ListView) findViewById(list1);
        final ArrayList<String> tubeLines = new ArrayList<>();
        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tubeLines);
        listView.setAdapter(arrayAdapter);



        RequestQueue queue = Volley.newRequestQueue(this);
        String url ="https://api.tfl.gov.uk/line/mode/tube,overground,dlr,tflrail/status";

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        try {
                            JSONArray array = new JSONArray(response);


                            for (int i = 0; i < array.length(); i++) {

                                JSONObject object = array.optJSONObject(i);
                                String line = object.optString("name");
                                //nested array
                                JSONArray arrayStatus = object.getJSONArray("lineStatuses");
                                int len = arrayStatus.length();


                                String statusSeverityDescription = null;
                                for (int j = 0; j < len; j++) {
                                    JSONObject o = arrayStatus.getJSONObject(j);
                                    statusSeverityDescription = o.optString("statusSeverityDescription", "");
                                }

                                if (line != null) {
                                    tubeLines.add(line + "               "+ statusSeverityDescription);
                                }
                            }
                            // Once we added the string to the array, we notify the arrayAdapter
                            arrayAdapter.notifyDataSetChanged();

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });
        queue.add(stringRequest);
    }
}





           class MyAdapter extends ArrayAdapter<String> {
            Context context;
            int [] images;
            String [] mytitles;
            String [] myDescriptions;
            MyAdapter(Context c,String[] titles,int imgs[],String[]desc)
            {
            super(c,R.layout.row,R.id.lineName,titles);
            this.context=c;
            this.images=imgs;
            this.mytitles=titles;
            this.myDescriptions=desc;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View row = inflater.inflate(R.layout.row,parent,false);
            ImageView myImage = (ImageView) row.findViewById(R.id.lineIcon);

            TextView myTitle = (TextView) row.findViewById(R.id.lineName);

            TextView myDesc = (TextView) row.findViewById(R.id.lineStatus);

            myImage.setImageResource(images[position]);
            myTitle.setText(mytitles[position]);
            myDesc.setText(myDescriptions[position]);
            return row;
        }
    }

1 个答案:

答案 0 :(得分:1)

为什么你没有使用Recyclerview而不是listview。创建自定义布局。并使用Recyclerview显示您的数据。这样会更有效率。