从活动中的片段中查找列表视图

时间:2012-10-08 21:37:16

标签: android tabs actionbarsherlock fragment

在我的应用程序中,我使用带有标签导航的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中找到listview以这种方式填充它:

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

...

但我有NullPointerException

为什么?

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

请帮帮我! 谢谢。

P.S。这是用于在片段中填充视图的正确方法,还是我必须在片段类中填充视图?如果第二个我如何将变量从活动传递给片段?

3 个答案:

答案 0 :(得分:0)

如果布局文件中的所有内容都是列表视图,请不要打扰覆盖oncreateview。默认布局会给你那么多。然后你可以使用ListFragment中内置的方法 - 比如getListView()和setListAdapter()。

答案 1 :(得分: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中不行啊!!

答案 2 :(得分:0)

如果要在ListFragments中使用ListView,ListView必须具有id android:id="@+id/android:list“!