2017-09-06 5 views
-1

Ich habe eine Liste mit einer benutzerdefinierten Zeile erstellt, aber ich weiß nicht, was los ist.Listenansicht mit benutzerdefiniertem Layout

Dies ist die Haupttätigkeit ist

package com.example.fahdmana.lest; 
    public class MainActivity extends AppCompatActivity{ 
    ListView listView; 

    final int[] movie_poster_resouce = { 
     R.drawable.apple, 
     R.drawable.banana, 
     R.drawable.cherry, 
     R.drawable.mango, 
     R.drawable.orange, 
     R.drawable.strawberry, 
     R.drawable.tomato 
    }; 

    String[]movies_title; 
    String[]movies_rating; 
    MovieAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     listView = (ListView)findViewById(R.id.List1); 
     movies_title = getResources().getStringArray(R.array.Movies_names); 
     movies_rating = getResources().getStringArray(R.array.Ratings); 

     int i =0; 
     for (String titles : movies_title){ 
      MovieDataProvider dataProvider = 
        new MovieDataProvider(movie_poster_resouce[i],titles,movies_rating[i]); 
      i++; 
      adapter = new MovieAdapter(getApplicationContext(),R.layout.row); 
      listView.setAdapter(adapter); 
      adapter.add(dataProvider); 
     } 
    } 
} 

Und das ist mein Adapter

package com.example.fahdmana.lest; 

import android.content.Context; 

import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 


public class MovieAdapter extends ArrayAdapter { 

    final List list = new ArrayList(); 

    public MovieAdapter( Context context, int resource) { 
     super(context, resource); 
    } 

    static class DataHandeler{ 
     ImageView poster; 
     TextView title; 
     TextView rating; 
    } 


    @Nullable @Override 
    public void add(Object object) { 
     super.add(object); 
     list.add(object); 
    } 


    @Nullable @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Nullable @Override 
    public Object getItem(int position) { 
     return this.list.get(position); 
    } 

    @Nullable @Override 
    public View getView (int position, 
      @NonNull View convertView, 
      @NonNull ViewGroup parent) { 
     View row; 
     row = convertView; 
     DataHandeler handler; 

     if (convertView ==null) { 
      LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.row, parent, false); 
      handler = new DataHandeler(); 
      handler.poster = (ImageView) row.findViewById(R.id.image_view); 
      handler.title = (TextView) row.findViewById(R.id.movie_title); 
      handler.rating = (TextView) row.findViewById(R.id.movie_rating); 
      row.setTag(handler); 
     } else { 
      handler = (DataHandeler) row.getTag(); 
     } 

     MovieDataProvider dataProvider; 
     dataProvider = (MovieDataProvider)this.getItem(position); 

     handler.poster.setImageResource(dataProvider. 
     getMovie_poster_resource()); 

     //here i get some warning 
     handler.title.setText(dataProvider.getMovie_title()); 
     handler.rating.setText(dataProvider.getMovie_rating()); 

     return row; 
} 

}

Und das ist mein Datenanbieter

package com.example.fahdmana.lest; 

public class MovieDataProvider { 
    private int movie_poster_resource; 
    private String movie_title; 
    private String movie_rating; 

    public MovieDataProvider(int movie_poster_resource, String movie_title, String movie_rating){ 
     this.setMovie_poster_resource(movie_poster_resource); 
     this.setMovie_title(movie_title); 
     this.setMovie_rating(movie_rating); 
    } 

    public int getMovie_poster_resource() { 
     return movie_poster_resource; 
    } 

    public void setMovie_poster_resource(int movie_poster_resource) { 
     this.movie_poster_resource = movie_poster_resource; 
    } 

    public String getMovie_title() { 
     return movie_title; 
    } 

    public void setMovie_title(String movie_title) { 
     this.movie_title = movie_title; 
    } 

    public String getMovie_rating() { 
     return movie_rating; 
    } 

    public void setMovie_rating(String movie_rating) { 
     this.movie_rating = movie_rating; 
    } 
} 
+4

Was genau läuft schief? Was erwartest du und was wird angezeigt? –

Antwort

0

Ich bin ziemlich sicher, das ist Ihr Problem.

for (String titles : movies_title){ 
     MovieDataProvider dataProvider = 
       new MovieDataProvider(movie_poster_resouce[i],titles,movies_rating[i]); 
     i++; 
     adapter = new MovieAdapter(getApplicationContext(),R.layout.row); 
     listView.setAdapter(adapter); 
     adapter.add(dataProvider); 
    } 

Sie haben dies in Ihrer Haupttätigkeit. Sie möchten nicht wirklich Ihre Liste durchlaufen und innerhalb dieser Schleife Ihren Adapter anrufen.

Sie möchten eine Liste der Objekte erstellen und dann den Adapter rufen .... so etwas wie dieses ...

ListViewAdapterResults adapter = new ListViewAdapterResults(listView.getContext(), scheduleModelList); 
    listView.setAdapter(adapter); 

Wo scheduleModelList meiner Liste von Objekten ist. Hoffentlich macht das Sinn. Glückliche Codierung.

Blick durch den Code, können Sie so etwas wie dies tun wollen ....

das Setzen an der Spitze

List<MovieDataProvider> list; 

Dann ist diese direkt nach dem setContentView

list = new ArrayList<>(); 

Ersetzen Sie die Schleife, die Sie damit haben:

for (int i = 0; i < movie_title.length; i++) { 
    list.add(new MovieDataProvider(movie_poster_resouce[i],titles,movies_rating[i])); 
} 
MovieAdapter adapter = new MovieAdapter(listView.getContext(), list); 
listView.setAdapter(adapter); 

Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.

MovieAdapter (dies ist der Adapter Klasse)

listview .getContext() (dies ist die ID Ihres Listview [Sie kann es etwas anderes genannt])

Es ist ein gewesen sehr lange Zeit seit ich mit Arrays gearbeitet habe .... muss man innerhalb der for-Schleife +1 oder -1 haben. (i < movie_title.length [vielleicht +1 oder -1])

+0

danke das ist gute Arbeit –

+0

groß. habe Spaß. – DroiDev

Verwandte Themen