14

私は次のメインレイアウトを持っています:

<LinearLayout android:id="@+id/LinearLayout01" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical">

 <ViewFlipper android:id="@+id/viewstack" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">

        <!-- Here I want to add my views which are located in separated xml files. -->

        </ViewFlipper>

</LinearLayout>

これが私の見解の例です:

view_url.xml

<LinearLayout android:id="@+id/LinearLayout01" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:gravity="center">
 <EditText android:text="@+id/EditText01" 
  android:id="@+id/EditText01" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content"/>
 <Button android:layout_width="wrap_content" 
                android:layout_height="wrap_content" 
                android:id="@+id/btnGenerate" 
                android:text="Generate"/>
</LinearLayout>

view_text.xml

<LinearLayout android:id="@+id/LinearLayout01" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical">

 <EditText android:text="@+id/EditText01" 
  android:id="@+id/EditText01" 
  android:layout_height="wrap_content" 
  android:contentDescription="Enter your text here" 
  android:layout_width="fill_parent" 
  android:height="200dp"/>
</LinearLayout>

ビューを追加しようとしています:

viewstack = (ViewFlipper) findViewById(R.id.viewstack);));

View viewText = (View) findViewById(R.layout.view_text);
viewstack.addView(viewText); < -- Emulator is crashing at this line
View viewUrl = (View) findViewById(R.layout.view_url);
viewstack.addView(viewUrl);

私のコードの何が問題なのかわかりません。すべてのビューを 1 つのファイルに入れることにしましたが、それでも最初のコードを修正する方法を知りたいです。

4

5 に答える 5

8

YoutView viewUrl = (View) findViewById(R.layout.view_url);は非常に間違っています。findViewById は get(String key) メソッドのようなもので、ディレクトリが現在のビュー/アクティビティであるディレクトリです。その子の下にあるその ID を持つ要素のみを検索します。

必要な XML ファイルから Java オブジェクトを作成するには、 LayoutInflaterを使用する必要があります。これは非常に簡単です。そこから、viewstack.addView(..) メソッドに渡すことができるオブジェクトを取得します。

これを実現する別の方法は、 includemergeタグ、またはViewStubのいずれかを使用して、他の XML ファイルを最初のファイルに含めることです。ただし、要件によっては、これらはオプションではない場合がありますが、説明しているものはそうあるべきであり、プログラムで行うのではなく、これらを使用する必要があります。

于 2010-05-03T16:06:31.460 に答える
5

多分これは助けになります:

    this.flipper=(ViewFlipper)findViewById(R.id.flipper);

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    this.viewLoader=(View)inflater.inflate(R.layout.search_result_grid, null);
    flipper.addView(viewLoader);        

    this.viewResultGrid=(View)inflater.inflate(R.layout.search_result_grid, null);
    gvSearchResult=(GridView)viewResultGrid.findViewById(R.id.gridViewSearchResult);        
    flipper.addView(viewResultGrid);
于 2011-12-12T15:23:52.853 に答える
0

この名前は、レイアウトではなくIDで検索されることを示しています。レイアウトとid.useの違いを理解する必要があります。Viewv =(View)findViewById(R.id.your_view_id);

于 2011-07-21T05:47:56.963 に答える
0

View を拡張して追加する最も簡単な方法。ここに、参照を見つけることができるいくつかの小さなスニペットがあります。

 private View viewText;
 private TextView txtPost;
 private void setViewFlipperPost(String postData, String postType) {

     if (postType.toLowerCase().toString().equals("text")) {

            viewText = LayoutInflater.from(mContext).inflate(R.layout.activity_full_screen_textpost, null, false);
            viewText.setTag(TAG_TEXT);

            txtPost = (TextView) viewText.findViewById(R.id.txtTextPostFullScreenText);
            txtPost.setText(postData);

            viewFlipper.addView(viewText);
    }
}
于 2016-09-21T10:15:46.510 に答える