我正在实施自定义水平视图寻呼机。我的意图是填充ListView中特定表的条目。该方法必须检测数据库中有多少个表,并为水平视图寻呼机设置多个页面。 (一个TABLE的一个页面 - 每个页面只包含一个ListView来显示相应TABLE的条目。)
这是我的尝试。
@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;
}
我希望上次数据库表成为默认页面。当我向左滑动它应该到第二个表,依此类推。在尝试这个时,我几乎得到了我需要的东西。除了这个问题。
结束 - TABLE6 - (向左滑动) - TABLE5 - (向左滑动) - TABLE5 < / strong> - (向左滑动) - TABLE3 - (向左滑动) - TABLE2 - (向左滑动) - TABLE1 - 的 END
结束 - TABLE1 - (向右滑动) - TABLE2 - (向右滑动) - TABLE2 < / strong> - (向右滑动) - TABLE3 - (向右滑动) - TABLE4 - (向右滑动) - TABLE5 - 的 END
我正确地做到了。这可能是个错误。有没有其他方法可以实现相同的目标?
答案 0 :(得分:1)
问题在于您的temp
和temp1
变量。请执行以下操作..
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]
一样轻松访问,如上所示。
答案 1 :(得分:1)
首先看起来不太好:
temp--;
temp1--;
...
temp--;
temp1--;
好的,您正在使用临时变量与您的位置进行比较,但该变量并不代表您想要的内容。
if(position < temp)
你减去两次温度并再次比较它? if(position>temp)
现在临时可能更小 - &gt;不是你想要的。我建议您直接使用该位置来获取正确的表并使用ELSE IF's