ListView 未显示 - Android 工作室

ListView not showing - Android studio

我有一个包含 ListView 的 activity。它将包含 3 个名称,但未显示。 CinemaActivity 创建一个新的 ListView 和一个新的适配器(下面的代码),然后检查 ListView 的哪个项目被按下并打开一个新的 activity。 现在的问题只是 ListView。

CinemaActivity.java

public class CinemaActivity extends AppCompatActivity {
    public Upcoming up;
    public MostPopular mos;

    public List<Data> dataUP;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cinema_activity);

        initUI();
    }

    public void initUI() {

        String data[] = new String[]{"Most Popular", "UpComing", "Top Rated"};

        ListView cinemaListview = (ListView) findViewById(R.id.lwCinema);
        cinemaMainAdapter cma = new cinemaMainAdapter(this, android.R.layout.simple_list_item_1, data);
        cinemaListview.setAdapter(cma);
        cinemaListview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> adapter, final View component, int pos, long id) {

                try {
                    openActivity(pos);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public void openActivity(int pos) {
        switch(pos) {
            case 0:
                Intent mpIntent = new Intent(this, MostPopular.class);
                startActivity(mpIntent);
                break;
            case 1:
                Intent ucIntent= new Intent(this, Upcoming.class);
                startActivity(ucIntent);
                break;
            case 2:
                Intent trIntent = new Intent(this, TopRated.class);
                startActivity(trIntent);
                break;
        }
    }

cinemaMainAdapter.java

public class cinemaMainAdapter extends ArrayAdapter<String> {

    Context context;
    int layoutResourceId;
    String data[] = null;

    public cinemaMainAdapter(Context context, int layoutResourceId, String data[]) {
        super(context, layoutResourceId);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            convertView = inflater.inflate(R.layout.cinema_listview, parent, false);

            holder = new ViewHolder();
            holder.textviewHolder = (TextView) convertView.findViewById(R.id.twcinemaLayoutMain);

            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        String title = data[position];
        holder.textviewHolder.setText(title);

        return convertView;
    }

    static class ViewHolder {
        public TextView textviewHolder;
    }
}

改变一下

super(context, layoutResourceId);

super(context, layoutResourceId, data);

让你的lwCinema.xml看起来像这样

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">


<ListView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@android:id/list">

</ListView>
</LinearLayout>

创建另一个 xml 文件,list_item.xml 这将保存每个列表项的视图

  <?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/name_textView"/>


</LinearLayout>

在 CinemaActivity 中,我将 CinemaMainAdapter class 设为私有,而不是将其作为单独的 class

public void initUI() {

String data[] = new String[]{"Most Popular", "UpComing", "Top Rated"};

List<String> listData = Arrays.asList(data);

ArrayList<String> arrayList = new ArrayList<String>(listData);

ListView cinemaListview = (ListView) findViewById(R.id.lwCinema);

CinemaMainAdapter adapter = new CinemaMainAdapter(arrayList);
cinemaListview.setAdapter(adapter);

}

private class CinemaMainAdapter extends ArrayAdapter<String> {

public CinemaMainAdapter(ArrayAdapter<String> arrayList){

  super(this,0,arrayList);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {


         //if we arent given a view inflate one
        //if there's no recycled view passed in inflate one
        if(convertView == null)
            convertView = this
                    .getLayoutInflater()
                    .inflate(R.layout.list_item, null);

      //configure the view for current item
       String item = getItem(position);

       TextView textView =   (TextView)convertView.findViewById(R.id.name_textView);
       textView.setText(item);     



        return convertView;//return view object to the list view


 }
 }//end private class CinemaMainAdapter