0

なぜ私はいつも (FrameLayout) findViewById が常に null を返すのですか? ファイルが存在します。Google マップの操作。関連トピックを読みました。搭載: Project-Clean。フォルダ gen を削除します。

    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

あなたが見つけている2つのビュー(travelMapViewおよびmapFrame)は同じレイアウトにありますtravel_map_activity。あなたが提供したレイアウトはまったく保持travelMapViewされていないため、まだNullPointerExceptionそこに到達していません。

編集:あなたが今示しているmapFrameように、同じビューにないので、それに到達する方法はありません...

1 つありますが、一度に1つのレイアウト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); 

これを使用すると、その null から逃れることができますが、現在のビューにない場合、その FrameLayout を使用できる可能性はありません。

于 2012-12-27T00:18:44.077 に答える
0

travel_map_activity.xmlID: を 1 つだけ含むからレイアウトをインフレートしていますR.id.travelMapView。他のレイアウトからアイテムを選択することはできません (システムの乱用に似たいくつかの小さな例外を除きます)。

を含むレイアウトにコンテンツ ビューを設定するかR.id.mapFrame、そのデータを渡す別の方法を見つける必要があります (おそらくwithとでBundleパッケージ化されたを使用します。たとえば、これをカバーする他の質問ブログがあります)。ものの種類)。Intent.putExtra().getIntExtra()

于 2012-12-27T00:35:23.923 に答える