1

我正在实现一个自定义水平视图寻呼机。我的意图是在 ListView 中填充特定表的条目。该方法必须检测数据库中有多少表,并为水平视图分页器设置尽可能多的页面。(一页一表 - 每页仅包含一个 ListView 以显示相应表的条目)。

这是我的尝试。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewp);
    MyPagerAdapter adapter = new MyPagerAdapter();
    ViewPager myPager = (ViewPager) findViewById(R.id.threepageviewer);
    myPager.setAdapter(adapter);
    DbHelper helper = new DbHelper(this);
    count = helper.countTables();
    myPager.setCurrentItem(count);
    temp = helper.countTables() - 1;
    temp1 = helper.countTables() - 1;
}

这是页面适配器类。

private class MyPagerAdapter extends PagerAdapter {

    public int getCount() {
        return count;
    }

    public Object instantiateItem(View collection, int position) {

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

        View view = null;


        if (position == count-1) {
            view = inflater.inflate(R.layout.middle, null);
            ListView list = (ListView) view.findViewById(R.id.listView1);
            helper = new DbHelper(Listing.this);
            String tabName = helper.getTableName(temp1);
            dataset_cursor = helper.getAll(tabName);
            startManagingCursor(dataset_cursor);
            adapter = new NoteAdapter(dataset_cursor);
            list.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
        if (position < temp) {
            temp--;
            temp1--;
            // int hg = temp - position;
            // int tempo = temp - hg;
            view = inflater.inflate(R.layout.left, null);
            ListView list1 = (ListView) view.findViewById(R.id.listView1);
            helper = new DbHelper(Listing.this);
            String tabName = helper.getTableName(temp1);
            dataset_cursor1 = helper.getAll(tabName);
            startManagingCursor(dataset_cursor1);
            adapter1 = new NoteAdapter(dataset_cursor1);
            list1.setAdapter(adapter1);
            adapter1.notifyDataSetChanged();
            Toast.makeText(getBaseContext(), tabName, Toast.LENGTH_LONG);
            temp--;
            temp1--;
        }
        if (position > temp) {
            temp++;
            temp1++;
            // int hg = position - temp;
            // int tempo = temp - hg;
            view = inflater.inflate(R.layout.right, null);
            ListView list2 = (ListView) view.findViewById(R.id.listView1);
            helper = new DbHelper(Listing.this);
            String tabName = helper.getTableName(temp1);
            dataset_cursor2 = helper.getAll(tabName);
            startManagingCursor(dataset_cursor2);
            adapter2 = new NoteAdapter(dataset_cursor2);
            list2.setAdapter(adapter2);
            adapter2.notifyDataSetChanged();
        }

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

我希望最后一个数据库表成为默认页面。当我向左滑动时,它应该转到倒数第二个表格,依此类推。在尝试这个时,我几乎得到了我需要的东西。除了这个问题。

END -- TABLE6 --(向左滑动)-- TABLE5 --(向左滑动) -- TABLE5 --(向左滑动)-- TABLE3 --(向左滑动)-- TABLE2 --(向左滑动)-- TABLE1 - -结束

END -- TABLE1 --(向右滑动)-- TABLE2 --(向右滑动)-- TABLE2 --(向右滑动)-- TABLE3 --(向右滑动)-- TABLE4 -- (向右滑动)-- TABLE5 - -结束

我做对了。这里可能是什么错误。还有其他方法可以实现吗?

4

2 回答 2

1

问题是因为你的temptemp1变量。请执行下列操作..

public Object instantiateItem(View collection, int position) {
     ...
     ...
     ListView list = (ListView) view.findViewById(R.id.listView1);
     helper = new DbHelper(Listing.this);
     String tabName = helper.getTableName(position+1);
     dataset_cursor[position] = helper.getAll(tabName);
     startManagingCursor(dataset_cursor[position]);
     adapter = new NoteAdapter(dataset_cursor[position]);
     list.setAdapter(adapter);
     adapter.notifyDataSetChanged();

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

     return view;
}

如果要维护多个数据集游标,则声明数据集游标数组,dataset_cursor[position]如上所示可以轻松访问。

于 2012-07-21T15:41:44.110 回答
1

首先看起来不太好:

temp--;
temp1--;
...
temp--;
temp1--;

好的,您正在使用临时变量与您的位置进行比较,但该变量不代表您想要的。

  1. 你减少了很多你的变量。我建议您删除代码中的第二个太减量。
  2. if(position < temp)你把你的温度降低两次,然后再比较一下?if(position>temp)现在温度可能更小->不是你想要的。

我建议你直接使用位置来获取正确的表格并使用ELSE IF's

于 2012-07-27T16:01:06.610 回答