2017-11-02 17 views
0

APIからのデータを使用してカスタムListViewを作成しようとしています。データはリストで表示されますが、アイコン付きのタイトルと字幕のカスタムレイアウト形式では表示されません。現在、2つのTextView項目として表示されています。私は行の見出しと行の副見出しとして表示する行の状態として表示する行の名前を取得したいと思います。正しい方向のポイントは非常に高く評価されるでしょう。以下のコードをご覧ください。APIからカスタムリストビューを更新できないのはなぜですか?

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

なぜlistviewの代わりにRecyclerviewを使用していないのですか?カスタムレイアウトを作成します。 Recyclerviewを使用してデータを表示します。これはより効率的です。