2010-05-03 5 views
13

Я следующий основной раскладке:Как программно добавить вид в 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> 

Я пытаюсь add views:

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

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

ответ

8

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

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

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

+0

Благодарим за помощь. Я буду стараться в обоих направлениях. – barmaleikin

0

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

2

может быть, это поможет:

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

    } 

} 
+0

Как ваш код отвечает на вопрос? Он пытается раздуть пользовательский вид на флиппе. –

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); 
    } 
} 
Смежные вопросы