Как программно добавить представление в ViewFlipper

У меня есть следующий основной макет:

<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); 

Я не знаю, что не так с моим кодом. Я решил поместить все свои взгляды в один файл, но я все еще хочу знать, как исправить свой первоначальный код.

Solutions Collecting From Web of "Как программно добавить представление в ViewFlipper"

Yout View viewUrl = (View) findViewById(R.layout.view_url); Это очень неправильно. FindViewById вроде как метод get (String key) – каталог, в котором ваш каталог является вашим текущим видом / активностью. Он только ищет элемент с этим Id под его детьми.

Чтобы создать объекты Java из XML-файлов, вам необходимо использовать LayoutInflater . Это довольно прямолинейно, из этого вы получаете объект, который вы можете передать в метод viewstack.addView (..).

Другим способом добиться этого было бы просто включить другие файлы XML в первый, используя либо теги include , merge , либо ViewStub . В зависимости от ваших требований это может быть не вариант, но то, что вы описываете, должно быть, и вы должны использовать их вместо того, чтобы делать это программно, потому что это просто чище.

Возможно, эта помощь:

  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); 

Это имя говорит о том, что он найдет по id не по макету. Вы должны понимать разницу между макетом и id.use, как этот. Просмотр v = (View) findViewById (R.id.your_view_id);

Самый простой способ добавить, раздувая 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); } } 
 use viewflipper <?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:background="@drawable/white" android:orientation="vertical" > <ViewFlipper android:id="@+id/view_flipper" android:layout_width="match_parent" android:layout_height="410dp" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="first layout" android:textColor="#845965" android:textSize="25dp" android:textStyle="bold" > </TextView> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="second layout" android:textColor="#654123" android:textSize="25dp" android:textStyle="bold" > </TextView> </LinearLayout> //you can add many layout here </viewFlipper> <Button android:id="@+id/flipbyclickNext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bn1" android:onClick="flipByClickNext" /> <Button android:id="@+id/flipbyclickprevious" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="flipByClickPrevious" android:background="@drawable/bp1" /> </LinearLayout> 

MainActivity.java

  public class MainActivity extends Activity { private ViewFlipper viewFlipper; //Button next,prev; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewFlipper = (ViewFlipper) findViewById(R.id.view_flipper); } public void flipByClickNext(View v) { if(viewFlipper.isFlipping())//Checking flipper is flipping or not. { viewFlipper.stopFlipping(); //stops the flipping . } viewFlipper.showNext();//shows the next view element of ViewFlipper } public void flipByClickPrevious(View v) { if(viewFlipper.isFlipping())//Checking flipper is flipping or not. { viewFlipper.stopFlipping(); //stops the flipping . } viewFlipper.showPrevious(); } }