在滑动页面中使用ListView

时间:2013-06-25 19:36:53

标签: android eclipse listview swipe swipeview

您好我有一个包含3页的滑动页面示例,我想在此示例中添加列表视图 但是,当我试图运行那个日食时,说"你的内容必须有一个ListView,其id属性是' android.R.id.list' &#34 ;.我不知道什么是错的。
我的主要活动布局

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

第1页

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

2页

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

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

我的寻呼机适配器

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

主要活动

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

2 个答案:

答案 0 :(得分:1)

这是因为您正在扩展ListActivity。 ListActivity从android包中查找具有特定标识符的ListView。

查看ListActivity的这一行

setContentView(R.layout.activity_main);

您的ListActivity正在为您的主要活动的布局而不是第2页(包含您的列表视图)的布局。

您需要在ListActivity的onCreate中更改该行以扩展正确的布局。假设您的ListActivity布局称为R.layout.list_activy。那条线就变成了

setContentView(R.layout.list_activity);

而不是你现在拥有的,我不确定包含listview的布局文件的名称是什么,你没有提到它(页面?)。

编辑:我记得ListActivity可能根本不需要调用setContentView(),因为无论如何都要将父布局传递给setAdapter()中的适配器。尝试完全删除该行,然后调用setAdapter。这两种方法都应该有效

答案 1 :(得分:0)

您的XML中有ListView,但您没有将适配器传递给它。创建ListView并将适配器传递给此列表视图。

试试这个

ListView myList=(ListView)findViewById(android.R.id.list);
myList.setAdapter(la);