2016-06-13 16 views
2

У меня есть активность, содержащая ListView. Он будет содержать 3 имени, но он не появится. CinemaActivity создаст новый ListView и новый адаптер (код ниже), а затем проверьте, какой элемент ListView нажат, и откройте новое действие. Проблема только в ListView.ListView не отображается - Android studio

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

Попробуйте создать адаптер с этими параметрами: 'новый cinemaMainAdapter (это, R.layout.cinema_listview, данные);' –

ответ

1

Просто измените

super(context, layoutResourceId); 

в

super(context, layoutResourceId, data); 
+0

Спасибо, я тоже пробовал с использованием метода getCount, и это тоже работает :) –

0

Попросите 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 быть частным вместо того, чтобы его как отдельный класс

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 
Смежные вопросы