2010-05-03 19 views
13

Ho seguito il layout principale:Come aggiungere a livello di codice in vista 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> 

Ecco esempio di mio punto di 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> 

Sto provando a aggiungi visualizzazioni:

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

Non ho idea di cosa c'è di sbagliato nel mio codice. Ho deciso di mettere tutte le mie viste in un file, ma voglio ancora sapere come risolvere il mio codice iniziale.

risposta

8

Yout View viewUrl = (View) findViewById(R.layout.view_url); è molto sbagliato. findViewById è un po 'come il metodo get (String key) la directory in cui la directory è la tua vista/attività corrente. Cerca solo l'elemento con quell'ID sotto i suoi figli.

Per creare oggetti Java da file XML che è necessario utilizzare è necessario utilizzare LayoutInflater. Il che è abbastanza semplice, da ciò si ottiene l'oggetto che si può passare al metodo viewstack.addView (..).

Un altro modo per ottenere ciò sarebbe includere gli altri file XML nel primo utilizzando i tag include, merge o ViewStub. A seconda delle tue esigenze, tuttavia, queste potrebbero non essere un'opzione, ma quello che stai descrivendo dovrebbero essere, e dovresti usarle invece di farlo in modo programmatico perché è solo più pulito in questo modo.

+0

Grazie per il vostro aiuto. Proverò in entrambi i modi. – barmaleikin

0

Il nome suggerisce che troverà per id non per layout. Dovresti capire la differenza tra layout e id.uso come questo View v = (View) findViewById (R.id.your_view_id);

2

forse questo aiuto:

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

In che modo il tuo codice risponde alla domanda? Sta cercando di gonfiare una vista personalizzata per il flipper .. –

0

Il modo più semplice per aggiungere gonfiando View. Ecco alcuni piccoli snippet in cui puoi trovare riferimenti.

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