-2

I am new to Android programming and I am about to create listview app that will show the list of movies with pics, titles, ratings, and genres. When I run the app I see the white screen, that is empty. There is no problem with layouts, I have created two layouts, one is activity_main and another one is custom_layout.

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.ListViewCompat;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    int[] images = {R.drawable.dfg,R.drawable.godf,R.drawable.godf2,R.drawable.thedark,R.drawable.twelv,R.drawable.shindl};
    String[] movie_titles = getResources().getStringArray(R.array.Movie_titles);
    String[] movie_ratings=getResources().getStringArray(R.array.Movie_ratings);
    String[] movie_janrs=getResources().getStringArray(R.array.Movie_janrs);
    setContentView(R.layout.activity_main);
    ListView mylist = (ListView) findViewById(R.id.list);
    ArrayList<String> rowItems = new ArrayList<>();
    ArrayAdapter<String> myadapter = new ArrayAdapter<>
(this,android.R.layout.simple_list_item_1,rowItems);
    if(mylist!=null){
        mylist.setAdapter(myadapter);
    }
}
}

CustomAdapter.java

import android.content.Context;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
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.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class CustomAdapter extends ArrayAdapter<RowItem> {


public CustomAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List<RowItem> objects) {
    super(context, resource, objects);
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    RowItem rowItem = getItem(position);
    if(convertView ==null){
        LayoutInflater vi = LayoutInflater.from(getContext());
        convertView = vi.inflate(R.layout.custom_layout,null);
        //convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_layout,parent,false);
    }
    if(rowItem!=null){
        ImageView tvImage = (ImageView) convertView.findViewById(R.id.shekil);
        TextView tvTittle = (TextView) convertView.findViewById(R.id.ad);
        TextView tvRating = (TextView) convertView.findViewById(R.id.rating);
        TextView tvJanr = (TextView) convertView.findViewById(R.id.janr);
        if(tvImage!=null && tvTittle!=null && tvRating!=null && tvJanr!=null){
            tvImage.setImageResource(rowItem.getImages());
            tvTittle.setText(rowItem.getMovie_titles());
            tvRating.setText(rowItem.getMovide_ratings());
            tvJanr.setText(rowItem.getMovide_janrs());
        }
    }

    return convertView;
}

RowItem.java

public class RowItem {
    int images;
    String movie_titles;
    String movide_ratings;
    String movide_janrs;

public RowItem(int images, String movie_titles, String movide_ratings, String movide_janrs) {
    this.images = images;
    this.movie_titles = movie_titles;
    this.movide_ratings = movide_ratings;
    this.movide_janrs = movide_janrs;
}

public int getImages() {
    return images;
}

public String getMovie_titles() {
    return movie_titles;
}

public String getMovide_ratings() {
    return movide_ratings;
}


public String getMovide_janrs() {
    return movide_janrs;
}

}
Sundar
  • 4,580
  • 6
  • 35
  • 61
Marada
  • 63
  • 7

2 Answers2

1

Issue is here

ArrayAdapter<String> myadapter = new ArrayAdapter<>
 (this,android.R.layout.simple_list_item_1,rowItems);  
 if(mylist!=null){       
    mylist.setAdapter(myadapter);
 }

You are using arrayadapter instead of your CustomAdapter.

CustomAdapter myadapter = new CustomAdapter(this,R.layout.custom_layout,rowItems);
     if(mylist!=null){
         mylist.setAdapter(myadapter);

Your CustomAdapter should be like this :

public CustomAdapter(Context context, int textViewResourceId, ArrayList<RowItem> items) {
        super(context, textViewResourceId, items);
    }

It seems like what you have shared on the question and what you have shared on the image is different. Above code has the same constructor which will not create any issue.

EDIT

In your MainActivity.java ,

Replace

ArrayList<String> rowItems = new ArrayList<>();

with

ArrayList<RowItem> rowItems = new ArrayList<>();
Samir Bhatt
  • 3,041
  • 2
  • 25
  • 39
  • 2
    That has happened to me Samir, when people downvote me and streal my answer. (I suspect) – parkgrrr Nov 29 '17 at 09:08
  • sorry, but when I changed ArrayAdapter into CustomAdapter then the problem appeared in CustomAdapter constructor. It cannot resolve method super, here is screenshot:https://drive.google.com/file/d/16cTZ7qTn3rUfzh2p8V6Gtxxk3GXB79Pd/view – Marada Nov 29 '17 at 09:23
  • Well, I did as you said, but when I do this red line appears in MainActivity.java https://drive.google.com/file/d/1w9BsN74c0Sh6d_UY66SH43yR2gCd1__A/view – Marada Nov 29 '17 at 10:02
1

Use this

CustomAdapter myadapter = new CustomAdapter(this,R.layout.custom_layout,rowItems);

instead of this

 ArrayAdapter<String> myadapter = new ArrayAdapter<>
(this,android.R.layout.simple_list_item_1,rowItems);

EDIT

add this Constructor in your CustomAdapter

public CustomAdapter(Context context, int textViewResourceId, ArrayList<RowItem> items) {
        super(context, textViewResourceId, items);
    }

EDIT 2

use

ArrayList<RowItem> rowItems;

instead of this

ArrayList<String> rowItems;
Goku
  • 9,102
  • 8
  • 50
  • 81
  • sorry, but when I changed ArrayAdapter into CustomAdapter then the problem appeared in CustomAdapter constructor. It cannot resolve method super, here is screenshot: https://drive.google.com/file/d/16cTZ7qTn3rUfzh2p8V6Gtxxk3GXB79Pd/view – Marada Nov 29 '17 at 09:24
  • @Marada this will solve your problem https://stackoverflow.com/questions/2265661/how-to-use-arrayadaptermyclass – Goku Nov 29 '17 at 09:25
  • Well, I did as you said, but when I do this red line appears in MainActivity.java https://drive.google.com/file/d/1w9BsN74c0Sh6d_UY66SH43yR2gCd1__A/view – Marada Nov 29 '17 at 10:03
  • @Marada add this **`ArrayList rowItems;`** – Goku Nov 29 '17 at 10:05
  • :( Unfortunately. I have tried as you said , and indeed red line disappeared. When I run app I see again white screen. I think my arrays did not assign into arraylist (rowItems) and now I am trying to figure out how to put my arrays into arraylist because it shows that they are never used. – Marada Nov 29 '17 at 13:23
  • Yes. I did it but in this time I used BaseAdapter instead of CustomAdapter – Marada Nov 30 '17 at 06:44
  • @Marada happy to help you – Goku Nov 30 '17 at 06:45