2017-12-03 6 views
0

Ich verwende den folgenden Code, um Bilder in ListView mit BaseAdapter anzuzeigen. Der Code zeigt Bilder aus dem internen Ordner. Aber ich möchte, um den Code zu ändern, so dass es Remote-Bilder aus folgenden Array zeigt:Wie können Remote-Bilder in ListView mit BaseAdapter angezeigt werden?

String flags[] ={"http://www.website.com/images/usa.png","http://www.website.com/images/china.png","http://www.website.com/images/australia.png","http://www.website.com/images/portugle.png","http://www.website.com/images/norway.png","http://www.website.com/images/new_zealand.png"}; 

Könnte ein Experte mir zeigen, was Teil change.Thanks im voraus sein muss.

MainActivity.java:

public class MainActivity extends Activity { 

    ListView simpleList; 
    String countryList[] = {"USA", "China", "australia", "Portugle", "Norway", "NewZealand"}; 
    int flags[] = {R.drawable.usa, R.drawable.china, R.drawable.australia, R.drawable.portugle, R.drawable.norway, R.drawable.new_zealand}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     simpleList = (ListView) findViewById(R.id.simpleListView); 
     CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), countryList, flags); 
     simpleList.setAdapter(customAdapter); 

     simpleList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       Toast.makeText(getApplicationContext(), "Hello " + countryList[position], Toast.LENGTH_LONG).show(); 


      } 
     }); 
    } 
} 

CustomAdapter.java:

Public class CustomAdapter extends BaseAdapter { 
    Context context; 
    String countryList[]; 
    int flags[]; 
    LayoutInflater inflter; 

    public CustomAdapter(Context applicationContext, String[] countryList, int[] flags) { 
     this.context = context; 
     this.countryList = countryList; 
     this.flags = flags; 
     inflter = (LayoutInflater.from(applicationContext)); 
    } 

    @Override 
    public int getCount() { 
     return countryList.length; 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     view = inflter.inflate(R.layout.activity_listview, null); 
     TextView country = (TextView) view.findViewById(R.id.textView); 
     ImageView icon = (ImageView) view.findViewById(R.id.icon); 
     country.setText(countryList[i]); 
     icon.setImageResource(flags[i]); 
     return view; 
    } 
} 

Antwort

1

Sie müssen:

1) holen diese Bilder in einem separaten Thread, können Sie Volley verwenden, Retrofit , robospice dafür.

2) Auf die Antwort einer dieser Methoden von 1) müssen Sie die Liste der Werte, die Sie von dem Dienst erhalten haben, an den Konstruktor Ihres Adapters übergeben. Sie müssen ein POJO für das Modell erstellen, diese Struktur enthält alle Elemente aus dem REST-Webservice.

3) Es wird empfohlen, einen Viewholder für den listview-Adapter zu verwenden, um ein erneutes Aufblähen der Views zu vermeiden.

+0

Vielen Dank für die Antwort. Ich bin nicht sehr erfahren in der Android-Entwicklung, also könnten Sie mir auf ein Tutorial zeigen, wie man eine Funktion schreibt und es aus getView aufruft und es an das Bild-Array weiterleitet, damit es auf listview angezeigt wird? – user1788736

+0

Ja, Sie können mit: https://www.simplifiedcoding.net/android-volley-tutorial-fetch-json/ – HaroldSer

+0

Später können Sie Jackson Databinding verwenden, um die Werte aus der Antwort auf die POJO (Modellklasse) abzubilden. Siehe diesen Link als Referenz: https://stackoverflow.com/questions/25545984/how-to-use-jackson-objectmapper-to-parse-json-response-to-java-objects – HaroldSer

0

Die einfachste Sache zu tun ist, verwenden Glide oder Picasso:

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 
    view = inflter.inflate(R.layout.activity_listview, null); 
    TextView country = (TextView) view.findViewById(R.id.textView); 
    ImageView icon = (ImageView) view.findViewById(R.id.icon); 
    country.setText(countryList[i]); 

    // Assuming flags is now the list of Strings of image urls 
    GlideApp.with(view.getContext()).load(flags[i]).into(icon); 

    return view; 
} 
+0

Vielen Dank für Ihren Beitrag. kannst du mir sagen, wie man GlideApp zu Android Studio 2.2 hinzufügt? Ich habe es noch nie zuvor benutzt. – user1788736

+0

https://bumptech.github.io/glide/doc/download-setup.html – dominicoder

Verwandte Themen