2017-09-06 10 views
-1

私はカスタム行のリストを作成しましたが、何が問題なのか分かりません。カスタムレイアウトのリストビュー

これは、主な活動

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

であり、これは私のアダプタ

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

}

であり、これは私のデータプロバイダ

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

正確には何が問題になっていますか?あなたは何を期待していて、何が表示されていますか? –

答えて

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

これはあなたの主な活動の中にあります。あなたは本当にあなたのリストをループしたくないし、そのループの中であなたのアダプタを呼び出す。

あなたはこのような何か... scheduleModelListは、オブジェクトの私のリストである

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

....あなたのオブジェクトのリストを作成し、アダプターを呼びたいです。うまくいけばそれは理にかなっている。 ハッピーコーディング。あなたのコードを見ると、あなたがこのような何かをしたい場合があり

....

はトップ

List<MovieDataProvider> list; 

でこれを入れて次にこの権利あなたのsetContentView後

list = new ArrayList<>(); 

ループを次のように置き換えます。

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

質問がある場合はお知らせください。

MovieAdapterは、それがされています

は、リストビュー .getContext()(これはあなたのリストビューのIDである[あなたはそれが何かをという名前があり〕)(これはあなたのアダプタクラスです)私がArraysで作業して以来、非常に長い時間がかかっています。forループの内側で+1または-1しなければなりません。 (i < movie_title.length [多分+1または-1]

+0

ありがとうございました。 –

+0

素晴らしいです。楽しむ。 – DroiDev

関連する問題