2016-06-29 3 views
0

Я знаю, чтобы получить ListItem от:ListView с изображением и текстом из JSON с помощью ArrayAdapter

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

Но как я могу получить его от ответа JSON? Я переместил свои данные в:

ArrayList<HashMap<String, String>> 

Мой код ниже, я должен использовать JSON вместо того, чтобы получить String[], потому что мой ответ JSON содержит идентификатор, название и ссылку на изображение.

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; 
     } 

    } 


} 
+0

Пожалуйста, предоставьте ответ json. – Drv

+0

@Drv ответ json как [{"id": "1", "data": "data1"}, {"id": "2", "data": "data2"}] –

+0

при использовании простого адаптера it показывает, что не может разрешить битмап. –

ответ

0

Вам необходимо создать собственный класс адаптера, расширяющий ArrayAdapter.

Ниже приведены ссылки на использование, с помощью которых вы можете достичь этого.

http://www.wingnity.com/blog/android-json-parsing-and-image-loading-tutorial/

https://www.youtube.com/watch?v=0Lr37suTPpg

Пожалуйста, комментарий, если вы сталкиваетесь с какими-либо проблемами при реализации.

@ Rathiga: - По вашему запросу я создал этот ответ из комментария к вашему вопросу.

0

Сначала измените выше код, ниже, так что вы можете увидеть список изображений и строки правильно:

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; 
    } 
} 
+0

@Rathiga Jesika Пожалуйста, сначала изучите все, а затем попытайтесь вызвать данные с сервера, а затем попробуйте конвертировать json и загрузить его в приложение. – Drv

+0

Я использовал функцию Picasso lib. bcz помогает загружать больше изображений. –

+0

, но способ u сказал, что он был абсолютно прав. Мне нужно узнать –

1

Я бы посоветовал вам перейти в библиотеку Volley для загрузки изображений из Json.

Вот ссылка на идеальный учебник, который показывает, шаг за шагом, как добиться того, что вы хотели:

http://www.androidhive.info/2014/07/android-custom-listview-with-image-and-text-using-volley/

Если вы столкнулись с какими-либо трудностями, не стесняйтесь комментировать ниже!

+0

Спасибо за ваш ответ. Я изучу этот код и попытаюсь реализовать. –

+0

Хорошо, удачи! Я попробовал это сам и заставил его работать. Итак, если вы наткнетесь на ошибку, прокомментируйте! :) – Kobe

Смежные вопросы