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

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

我不知道我的代码哪里出了问题。我决定把所有的视图都放在一个文件中,但我仍然想知道如何修复我最初的代码。

5个回答

8
你的 View viewUrl = (View) findViewById(R.layout.view_url); 写法非常错误。findViewById有点像是在当前视图/活动中寻找具有该Id的元素,就像get(String key)方法在目录中查找一样。它仅查找其子元素中具有该Id的元素。
要从XML文件创建Java对象,则需要使用LayoutInflater。这非常简单,通过它您可以获得对象,然后将其传递给viewstack.addView(..)方法。
另一种实现方式是使用includemerge标记或ViewStub将其他XML文件包含到第一个XML文件中。根据您的要求,这些可能不是可选项,但根据您的描述,它们应该是可行的,并且您应该使用这些而不是以编程方式进行操作,因为这样更加简洁。

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

0

通过填充视图最简单的添加方式。这里有一些小片段,您可以在其中找到参考。

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

0

它的名称表明它将通过id而不是布局来查找。您应该了解布局和id之间的区别。使用类似这样的代码 View v =(View)findViewById(R.id.your_view_id);


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

    }

}

你的代码如何回答这个问题?他正试图将自定义视图填充到翻转器中。 - Prasanna Aarthi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接