如何以编程方式在ViewFlipper中添加视图

bar*_*kin 13 android 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>
Run Code Online (Sandbox Code Playgroud)

以下是我的观点示例:

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我想添加视图:

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);
Run Code Online (Sandbox Code Playgroud)

我不知道我的代码有什么问题.我决定将所有视图放在一个文件中,但我仍然想知道如何修复我的初始代码.

Mar*_*maa 8

Yout View viewUrl = (View) findViewById(R.layout.view_url);非常错误.findViewById有点像get(String key)方法,你的目录是你当前视图/活动的目录.它只在其子项下查找具有该Id的元素.

要使用XML文件创建Java对象,您需要使用LayoutInflater.这是非常简单的,你得到的对象可以传递给viewstack.addView(..)方法.

实现此目的的另一种方法是通过使用include,merge标记或ViewStub将其他XML文件包含到第一个XML文件中.根据您的要求,这些可能不是一个选项,但是您所描述的应该是,并且您应该使用这些而不是以编程方式执行它,因为它以这种方式更干净.


Mir*_*dil 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);
Run Code Online (Sandbox Code Playgroud)