2014-12-18 4 views
0

Я создал Listview внутри фрагмента, но когда я выполнил приложение, ListView не появляется на экране. Нет аварий. У меня есть текстовое представление и список. Появляется Textview, но список отсутствует.Listview не отображается во Фрагменте

Код для фрагмента:

public class PlayerFragment extends Fragment { 
private List<Station> myStation = new ArrayList<Station>(); 
private LayoutInflater mInflater; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_player, 
      null); 

    populateStationList(); 
    myStation.add(new Station("station1", "url1", R.drawable.station1, "station1 description")); 
    myStation.add(new Station("station2", "url2", R.drawable.station2, "station2 description")); 
    myStation.add(new Station("station3", "url3", R.drawable.station3, "station3 description")); 

    populateListView(); 
    ArrayAdapter<Station> adapter = new MyListAdapter(); 
    ListView list = (ListView) view.findViewById(R.id.stationListView); 
    list.setAdapter(adapter); 

    registerClickCallback(); 
    list = (ListView) view.findViewById(R.id.stationListView); 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View viewClicked, 
           int position, long id) { 
      Station clickedStation = myStation.get(position); 
      String message = "You clicked position " + position 
        + "\n" + "Station: " + clickedStation.getStationName(); 
      Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show(); 
     } 
    }); 

    return inflater.inflate(R.layout.fragment_player, container, false); 
} 

private class MyListAdapter extends ArrayAdapter<Station> { 
    public MyListAdapter() { 
     super(getActivity(), R.layout.station_list_view, myStation); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Make sure we have a view to work with (may have been given null) 
     View itemView = convertView; 
     if (itemView == null) { 
      itemView = mInflater.inflate(R.layout.station_list_view, parent, false); 
     } 

     // Find the car to work with. 
     Station currentStation = myStation.get(position); 

     // Fill the view 
     ImageView imageView = (ImageView) itemView.findViewById(R.id.item_icon); 
     imageView.setImageResource(currentStation.getStationAlbum()); 

     TextView stationName = (TextView) itemView.findViewById(R.id.item_station_name_text_view); 
     stationName.setText(currentStation.getStationName()); 

     TextView stationURL = (TextView) itemView.findViewById(R.id.item_url_text_view); 
     stationURL.setText("" + currentStation.getStationURL()); 

     TextView stationDescription = (TextView) itemView.findViewById(R.id.item_description_text_view); 
     stationDescription.setText(currentStation.getStationDescription()); 

     return itemView; 
     } 
    } 
} 

XML для фрагмента:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/playerFragment" 
    tools:context="com.brandonong.sgpradio.PlayerFragment"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="heysdadasdasdadasdasd" 
     android:id="@+id/textview1"/> 
    <ListView 
     android:id="@+id/stationListView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textview1" > 
    </ListView> 
</RelativeLayout> 

ответ

0

Проблема заключается в том, кроме инфляции макета inflater.inflate(R.layout.fragment_player, container, false); всех остальной код должен быть размещен внутри onViewCreated. Попробуйте это и посмотрите, работает ли это!

Edit:

Ваш onCreateView:

return inflater.inflate(R.layout.fragment_player, container, false);

OnViewCreated:

populateStationList(); 
    myStation.add(new Station("station1", "url1", R.drawable.station1, "station1 description")); 
    myStation.add(new Station("station2", "url2", R.drawable.station2, "station2 description")); 
    myStation.add(new Station("station3", "url3", R.drawable.station3, "station3 description")); 

    populateListView(); 
    ArrayAdapter<Station> adapter = new MyListAdapter(); 
    ListView list = (ListView) view.findViewById(R.id.stationListView); 
    list.setAdapter(adapter); 

    registerClickCallback(); 
    list = (ListView) view.findViewById(R.id.stationListView); 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View viewClicked, 
           int position, long id) { 
      Station clickedStation = myStation.get(position); 
      String message = "You clicked position " + position 
        + "\n" + "Station: " + clickedStation.getStationName(); 
      Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show(); 
     } 
    }); 

И кстати, я очень рекомендую вам посмотреть post проверить шаблон ViewHolder, который улучшает производительность ListView!

+0

Можете ли вы мне помочь? Как показать мне код? Если я переместил его в onViewCreated, как насчет «представления» в «ListView list = (ListView) view.findViewById (R.id.stationListView); –

+0

Конечно, собираюсь отредактировать мой ответ, повесить на – Leonardo

+0

Посмотрите, поможет ли это! Я не тестировал его, поэтому вам может понадобиться исправить мелкие вещи! – Leonardo

Смежные вопросы