2016-07-14 71 views
1

我知道这个问题已经被问过很多次了,不过我已经去了所有的答案,没有他们的工作对我来说。ListView控件在片段不显示任何

因此,在应用程序的问题是,我想填充使用ArrayAdapter和应用程序MainActivity启动时不显示任何东西,但白色屏幕的ArrayList到一个ListView。

这里的 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卢卡的答案将解决您的问题 –