0

为什么我总是(FrameLayout)findViewById 总是返回null?该文件存在。使用谷歌地图。我阅读了相关主题。技术支持:项目清洁。删除文件夹生成。

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.travel_map_activity);
    mapView = (MapView) findViewById(R.id.travelMapView);

    FrameLayout mainLayout = (FrameLayout) findViewById(R.id.mapFrame);//null

}

有什么问题?

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapFrame"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TextView
    android:id="@+id/tvTop"
    android:layout_width="fill_parent"
    android:layout_height="20dip"
    android:background="#FFFFFF"
    android:gravity="top|center_horizontal"
    android:text="FLOATING VIEW - TOP"
    android:textColor="#000000"
    android:textStyle="bold" />

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/lvMain"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout></FrameLayout>

travel_map_activity.xml

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

<com.google.android.maps.MapView
    android:id="@+id/travelMapView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:apiKey="key" />

</LinearLayout>

谢谢

4

2 回答 2

0

您正在从 膨胀布局travel_map_activity.xml,其中仅包含一个 ID: R.id.travelMapView。您不能从其他布局中选择项目(有一些小例外,更像是对系统的滥用)。

您要么需要将内容视图设置为它包含的任何布局R.id.mapFrame,要么您需要找到另一种方式来传递该数据(例如,可能使用与with和Bundle打包的方式;还有其他问题博客涵盖此之类的事情)。Intent.putExtra().getIntExtra()

于 2012-12-27T00:35:23.923 回答
0

您在相同的布局中找到(travelMapView和)这两个视图。因为您提供的布局根本不存在,但您却没有在那里。mapFrametravel_map_activitytravelMapViewNullPointerException

编辑:正如你现在所展示的,mapFrame不在同一个视图中,所以没有办法做到这一点......

,有一个,但它不会有用,因为setContentView一次只显示一个布局。无论如何,您仍然可以mapFrame使用膨胀的布局进行访问,而无需实际使用它(那是因为它完全没用):

LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View view = inflater.inflate( R.layout.your_other_layout_with_framelayout, null );
FrameLayout mainLayout = (FrameLayout) view.findViewById(R.id.mapFrame); 

使用它可以让您摆脱该空值,但同样,如果 FrameLayout 不在您当前的视图中,您就不可能使用它。

于 2012-12-27T00:18:44.077 回答