0

I have a viewflipper that I want to populate with the same layout multiple times, but in each layout I need to display different text and a different background image, based on some array. So far, it just replaces the first view every time with the different text/ backgrounds. For now, I've predefined the arrays. Any help is greatly appreciated.

The code for the viewflipper:

private int numcards = 3;
private String creditnum[] = {"***********2451", "***********2452", "***********2453"};
private int carddraw[] = {R.drawable.fullcredit_blue, R.drawable.fullcredit_green, R.drawable.fullcredit_silver};

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.show_cards);
    viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);

    gestureDetector = new GestureDetector(this);
    for (int i = 0; i < numcards; i++)
    {
        viewFlipper.addView(View.inflate(this, R.layout.card_scroll_item, null), new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/credit.otf");
        Button creditbtn = (Button) findViewById(R.id.credit_button);
        creditbtn.setBackgroundResource(carddraw[i]);
        TextView txtname = (TextView) findViewById(R.id.credit_type);
        txtname.setText("Visa");
        TextView txtnumber = (TextView) findViewById(R.id.credit_number);
        txtnumber.setText(creditnum[i]);
        txtnumber.setTypeface(tf);

    }
}

And the xml for the view that i'm inflating:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >


<Button
    android:id="@+id/credit_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginTop="104dp" android:layout_marginBottom="220dp" android:layout_alignParentBottom="true"/>

<TextView
    android:id="@+id/credit_type"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/credit_button"
    android:layout_alignTop="@+id/credit_button"
    android:layout_marginRight="22dp"
    android:layout_marginTop="21dp"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" android:typeface="normal"/>



<TextView
    android:id="@+id/credit_number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/credit_button"
    android:layout_alignRight="@+id/credit_type"
    android:layout_centerVertical="true"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginLeft="15dp" android:layout_marginBottom="30dp"/>

Jordan B.
  • 143
  • 7

1 Answers1

0

The problem is that you aren't holding on to the view you're adding, so findViewById is being called on the Activity's content view, which will always return the first view with that ID. Try this:

View view = View.inflate(this, R.layout.card_scroll_item, null);
viewFlipper.addView(view);
Button creditbtn = (Button) view.findViewById(R.id.credit_button);
creditbtn.setBackgroundResource(carddraw[i]);
TextView txtname = (TextView) view.findViewById(R.id.credit_type);
txtname.setText("Visa");
TextView txtnumber = (TextView) view.findViewById(R.id.credit_number);
txtnumber.setText(creditnum[i]);
txtnumber.setTypeface(tf);

Those layout params are redundant, as you have them defined in your XML.

tad
  • 1,383
  • 11
  • 16