Question

Hi i have a swipe pages example which contain 3 page and i want to add a List View to this example.
But when i try to run that eclipse say "Your content must have a ListView whose id attribute is 'android.R.id.list' ". i do not know whats wrong.
My Main Activity Layout

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

    <android.support.v4.view.ViewPager
        android:id="@+id/customviewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />    

     </LinearLayout>    

Page1

<?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="@color/blue"
android:orientation="vertical" >     

<Button
    android:id="@+id/buttonBlue"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/label_blue"
    android:onClick="@string/listenerBlueButton" />

 </LinearLayout>     

Page2

    <?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="@color/yellow"
    android:orientation="vertical" >

    <Button
        android:id="@+id/buttonYellow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/label_yellow"
        android:onClick="@string/listenerYellowButton" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

    </LinearLayout>  

Page 3

<?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="@color/red"
android:orientation="vertical" >

<Button
    android:id="@+id/buttonRed"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/label_red"
    android:onClick="@string/listenerRedButton" />

</LinearLayout>

My Pager Adapter

   package ro.ovidiuconeac.horizontalviewswiping;

     public class CustomPagerAdapter extends PagerAdapter {

    public Object instantiateItem(View collection, int position) {

        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        int resId = 0;
        switch (position) {
        case 0: {
            resId = R.layout.page_1;
            break;
        }
        case 1: {
            resId = R.layout.page_2;
            break;
        }
        case 2: {
            resId = R.layout.page_3;
            break;
        }
        }

        View view = inflater.inflate(resId, null);

        ((ViewPager) collection).addView(view, 0);

        return view;
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);

    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public int getCount() {
        return 3;
    }
    }

Main Activity

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Create and set adapter
    CustomPagerAdapter adapter = new CustomPagerAdapter();
    ViewPager myPager = (ViewPager) findViewById(R.id.customviewpager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(1);

    String[] ex=new String[10];
    ex[0]="1";
    ex[1]="2";
    ex[2]="3";
    ex[3]="1";
    ex[4]="2";
    ex[5]="3";
    ex[6]="1";
    ex[7]="2";
    ex[8]="3";
    ex[9]="3";

    setContentView(R.layout.page_2);
    ListView myList=(ListView)findViewById(android.R.id.list);
    ListAdapter la=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ex);

    myList.setAdapter(la);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

/**
 * Click button on blue page
 */
public void onClickBlueButton(View v) {
    Toast.makeText(getApplicationContext(), "Blue screen", Toast.LENGTH_SHORT).show();
}

/**
 * Click button on yellow page
 */
public void onClickYellowButton(View v) {
    Toast.makeText(getApplicationContext(), "Yellow screen", Toast.LENGTH_SHORT).show();
}

/**
 * Click button on red page
 */
public void onClickRedButton(View v) {
    Toast.makeText(getApplicationContext(), "Red screen", Toast.LENGTH_SHORT).show();
}
}
Was it helpful?

Solution

This is because you're extending ListActivity. ListActivity looks for a ListView with a specific identifier from the android package.

Have a look at this line of your ListActivity

setContentView(R.layout.activity_main);

Your ListActivity is inflating the layout for your main activity, instead of the layout for your page 2(which contains your listview).

You need to change that line in the onCreate of your ListActivity to inflate the correct layout. Let's say your ListActivity layout is called R.layout.list_activy. That line then becomes

setContentView(R.layout.list_activity);

Instead of what you currently have, I'm not sure what the name of your layout file containing the listview is called you didn't mention it(page?).

EDIT: I just remembered that ListActivity may not need a call to setContentView() at all, since you pass in the parent layout to your adapter in setAdapter() anyways. Try removing that line altogether and just call setAdapter. Both of these approaches should work though

OTHER TIPS

You have ListView in your XML but you are not passing your adapter to it. Create a ListView and pass your adapter to this list view.

Try this

ListView myList=(ListView)findViewById(android.R.id.list);
myList.setAdapter(la);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top