Frage Wie programmgesteuert Ansicht in ViewFlipper hinzufügen


Ich habe folgendes Hauptlayout:

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

Hier ist ein Beispiel meiner Ansicht:

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>

Ich versuche, Ansichten hinzuzufügen:

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

Ich habe keine Ahnung, was mit meinem Code nicht stimmt. Ich beschloss, alle meine Ansichten in eine Datei zu schreiben, aber ich möchte immer noch wissen, wie ich meinen ursprünglichen Code repariere.


13
2018-05-03 15:51


Ursprung


Antworten:


Yout View viewUrl = (View) findViewById(R.layout.view_url); ist sehr falsch. findViewById ist ein bisschen wie die Methode get (String key) das Verzeichnis, in dem Ihr Verzeichnis Ihre aktuelle Ansicht / Aktivität ist. Es sucht nur das Element mit dieser ID unter seinen Kindern.

Um Java-Objekte aus XML-Dateien zu erstellen, die Sie benötigen, verwenden Sie die LayoutInflatier. Was ziemlich einfach ist, davon bekommst du das Objekt, das du an die Methode viewstack.addView (..) übergeben kannst.

Eine andere Möglichkeit, dies zu erreichen, wäre, einfach die anderen XML-Dateien in die erste zu integrieren, indem Sie entweder die einschließen, verschmelzen Tags oder die ViewStub. Je nach Ihren Anforderungen sind diese Optionen möglicherweise keine Option, aber was Sie beschreiben, sollten sie sein, und Sie sollten diese verwenden, anstatt es programmatisch zu tun, weil es auf diese Weise einfach sauberer ist.


8
2018-05-03 16:06



Vielleicht diese Hilfe:

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

3
2017-12-12 15:23



Sein Name deutet darauf hin, dass es nach ID und nicht nach Layout findet. Sie sollten den Unterschied zwischen Layout und ID verstehen. Verwenden Sie diese Ansicht v = (Ansicht) findViewById (R.id.your_view_id);


0
2017-07-21 05:47



Einfachste Möglichkeit zum Hinzufügen durch Aufblasen von View. Hier ein kleiner Auszug, wo Sie eine Referenz finden können.

 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
2017-09-21 10:15



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>

Hauptaktivität.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();

    }

}

-1
2017-12-30 00:15