2010-05-03 24 views
13

He siguiente distribución principal:Cómo agregar mediante programación vista en 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> 

Aquí es ejemplo de mi punto de vista:

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> 

Estoy tratando de Agregar vistas:

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

No tengo ni idea de qué hay de malo en mi código. Decidí poner todos mis puntos de vista en un solo archivo, pero aún quiero saber cómo arreglar mi código inicial.

Respuesta

8

Yout View viewUrl = (View) findViewById(R.layout.view_url); está muy mal. findViewById es como el método get (String key), el directorio donde su directorio es su vista/actividad actual. Solo busca el elemento con ese Id debajo de sus hijos.

Para crear objetos Java a partir de archivos XML que necesita usar, necesita usar el LayoutInflater. Lo cual es bastante directo, de eso obtienes el objeto que puedes pasar al método viewstack.addView (..).

Otra forma de lograr esto sería simplemente incluir los otros archivos XML en el primero usando las etiquetas include, merge o ViewStub. Dependiendo de sus necesidades, estas pueden no ser una opción, pero lo que usted está describiendo deberían ser, y debería usarlas en lugar de hacerlo programáticamente porque es más limpio de esta manera.

+0

Gracias por su ayuda. Lo intentaré en ambos sentidos. – barmaleikin

0

Su nombre indica que encontrará por id, no por diseño. Debe comprender la diferencia entre el diseño y el id.use como este Ver v = (Ver) findViewById (R.id.your_view_id);

2

tal vez esto ayuda:

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

¿Cómo responde su código la pregunta? Está tratando de inflar una vista personalizada de la aleta. –

0

manera más fácil agregar inflando Vista. Aquí hay un pequeño fragmento donde puedes encontrar referencias.

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