1

在我的应用程序中,我使用带有标签导航的 SherlockActionBar。在扩展 SherlockFragmentActivity 的活动 MyFragmentActivity 中,我添加了 3 个带有片段的选项卡

    mTabsAdapter.addTab(
            bar.newTab().setText(getString(R.string.filmtab)),
            FragmentFilm.class, null);
    mTabsAdapter.addTab(
            bar.newTab()
                    .setText(getString(R.string.cinematab)),
            FragmentCinema.class, null);
    mTabsAdapter.addTab(
            bar.newTab()
                    .setText(getString(R.string.dintornitab)),
            FragmentPdi.class, null);

FragmentPdi 类具有以下代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{

    View view = inflater.inflate(R.layout.tab_pdi_info, container, false);

    return view;
}

布局是

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

    <ListView
            android:id="@+id/list_places"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent" > 
    </ListView>  


</RelativeLayout>   

在 MyFragmentActivity 我想找到以这种方式填充它的列表视图:

final ListView elencoPlaces = (ListView)findViewById(R.id.list_places);

……

但我有NullPointerException

为什么??

在另一个片段(FragmentFilm 和 FragmentCinema)中,我有其他视图,例如 textview,没有这个问题!

请帮我!谢谢你。

PS这是在片段中动态填充视图的正确方法,还是我必须在片段类中填充视图?如果第二个我如何将变量从活动传递到片段?

4

3 回答 3

0

如果您在布局文件中只有一个列表视图,请不要费心覆盖 oncreateview。默认布局会给你那么多。然后你可以使用内置在 ListFragment 中的方法——比如 getListView() 和 setListAdapter()。

于 2012-10-08T23:25:52.163 回答
0

好的,但我不明白为什么我有另一个片段 FragmentCinema 我有这个 xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:paddingTop="10dip" android:id="@+id/otherCinemas" android:layout_width="fill_parent" android:layout_height="wrap_content"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout android:orientation="horizontal" android:id="@+id/plotSeparatorOtherCin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/txtProgrammation">
        <ImageView android:layout_gravity="center_vertical" android:background="@drawable/palm_divider_line" android:layout_width="20.0dip" android:layout_height="wrap_content" android:layout_marginRight="5.0dip" />
        <TextView android:layout_gravity="center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/altricinema" android:textStyle="bold" />
         <ImageView android:id="@+id/showOtherCinemas" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:src="@drawable/ic_action_freccia_cinema"
          />
       <ImageView android:layout_gravity="center_vertical" android:background="@drawable/palm_divider_line" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 
    </LinearLayout>


    <ListView
        android:id="@+id/listOtherCinemas"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_below="@id/plotSeparatorOtherCin"
        android:visibility="gone" >
    </ListView>

</RelativeLayout> 

和这个类代码:

public class FragmentCinema extends SherlockFragment

{

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

    return view;
}

}

当我使用 findViewbyId 最终 ListView CinemasOther = (ListView)findViewById(R.id.listOtherCinemas); 有用!但是在 FragmentPdi 中不起作用!

于 2012-10-09T18:27:11.490 回答
0

如果你想在 ListFragments 中使用 ListView,你的 ListView 必须有 id android:id="@+id/android:list"!

于 2013-01-30T15:18:42.740 回答