2016-07-14 3 views
1

Я знаю, что этот вопрос задан много раз, но я пошел на все ответы, и никто из них не работал для меня.ListView in Fragment ничего не показывает

Итак, проблема с App заключается в том, что я пытаюсь заполнить ArrayList в ListView с помощью ArrayAdapter, а приложение MainActivity не показывает ничего, кроме белого экрана при запуске.

Вот MainActivity.java

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 


public static class PlaceholderFragment extends Fragment{ 

    private ArrayAdapter<String> mForecastAdapter; 

    public PlaceholderFragment(){} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     //Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

     String[] forecastArray = { 
       "Today - Sunny - 88/63", 
       "Tomorrow - Foggy - 70/46", 
       "Weds - Cloudy - 72/63", 
       "Thurs - Rainy - 64/51", 
       "Fri - Foggy - 70/46", 
       "Sat - Sunny - 76/68" 
     }; 

     List<String> weekForecast = new ArrayList<String>(Arrays.asList(forecastArray)); 
     ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast); 
     listView.setAdapter(mForecastAdapter); 

     mForecastAdapter = new ArrayAdapter<String>(
       //The current context (current activity) 
       getActivity(), 
       //ID of list item layout 
       R.layout.list_item_forecast, 
       //id of the textView to populate 
       R.id.list_item_forecast_textview, 
       //data to populate 
       weekForecast 
     ); 

     return rootView; 
    } 
} 

fragment_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.gautamhans.sunshine.app.MainActivityFragment" 
    tools:showIn="@layout/activity_main"> 

    <ListView 
     android:id="@+id/listview_forecast" 
     android:layout_width="match_parent" 
     android:layout_height="667dp" 
     /> 

</FrameLayout> 

Вот list_item_forecast.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:id="@+id/list_item_forecast_textview" 
    > 

</TextView> 
+0

доли вашего пейджер адаптер код. –

+0

Прошу прощения, но нет пейджера. @ArpitRatan –

ответ

1

Конечно, деятельность не показывает ничего, вы не размещаете фрагмент внутри своей деятельности! Используйте это в вашей деятельности-х onCreate():

getSupportFragmentManager().beginTransaction() 
.replace(R.id.container, new PlaceholderFragment(), "fragment_tag").commit(); 

Где R.id.container является расположение внутри файла main_activity_layout (пустой макет)

UPDATE:

есть эти 2 файла:

activity_main:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/container" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

</RelativeLayout> 

fragment_main:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.gautamhans.sunshine.app.MainActivityFragment" 
    tools:showIn="@layout/activity_main"> 

    <ListView 
     android:id="@+id/listview_forecast" 
     android:layout_width="match_parent" 
     android:layout_height="667dp" 
     /> 

</FrameLayout> 

сохранить файл макета 3 °, все в порядке.

Теперь в вашей деятельности:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    getSupportFragmentManager().beginTransaction() 
    .replace(R.id.container, new PlaceholderFragment(), "fragment_tag").commit(); 
} 

также:

 mForecastAdapter = new ArrayAdapter<String>(
       //The current context (current activity) 
       getActivity(), 
       //ID of list item layout 
       R.layout.list_item_forecast, 
       //id of the textView to populate 
       R.id.list_item_forecast_textview, 
       //data to populate 
       weekForecast 
     ); 
//move this after the initialization of adapter 
listView.setAdapter(mForecastAdapter); 
+0

Я пробовал этот метод, и теперь, когда приложение запускается, активность наступает секунду, а затем исчезает. (R.id.listview_forecast) btw, класс PlaceholderFragment находится внутри класса MainActivity. –

+0

Используйте 2 разных файла макета. Один для активности (который будет контейнером) и один для фрагмента, со списком в нем. Внутри файла макета активности используйте макет с id = "container", чтобы вы могли «заполнить» его фрагментом –

+0

Да, я это делаю. fragment_main.xml содержит ListView и один list_item_forecast.xml. Прошу прощения за то, что я забыл поставить там другого. –

0

При установке адаптера ListView, ссылка адаптера является недействительным и вы устанавливаете нулевой адаптер для ListView. Вы должны создать адаптер перед установкой адаптера ListView.

ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast); 

    mForecastAdapter = new ArrayAdapter<String>(
      //The current context (current activity) 
      getActivity(), 
      //ID of list item layout 
      R.layout.list_item_forecast, 
      //id of the textView to populate 
      R.id.list_item_forecast_textview, 
      //data to populate 
      weekForecast 
    ); 
    listView.setAdapter(mForecastAdapter); 
+0

Я попытался настроить mForeCastAdapter на listView после определения адаптера, но проблема сохраняется. –

+0

Вы должны использовать FragmentManager для добавления фрагмента в MainActivity. –

0

Является ли ваш сайт PlaceHolderFragment в файле MainActivity.java?

Если это так, попробуйте разделив его на свой собственный файл PlaceHolderFragment.java ..

Насколько я знаю, Java позволяет только один публичный класс в исходный файл .. Это может быть причиной вашей проблемы ..

+0

, который не должен быть проблемой вообще. потому что это разрешено в java. –

+0

@ Ответ GautamHans Luca решит вашу проблему –

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