1

カスタムの水平ビューページャーを実装しています。私の意図は、ListViewの特定のテーブルのエントリにデータを入力することです。このメソッドは、データベースにあるテーブルの数を検出し、水平ビューページャーに同じ数のページを設定する必要があります。(1つのテーブルに対して1つのページ-各ページには、対応するテーブルのエントリを表示するための1つの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;
    }

最後のデータベーステーブルをデフォルトページにします。左にスワイプすると、最後から2番目のテーブルに移動します。これを試している間、私はほとんど必要なものを手に入れます。この問題を除いて。

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 番目のデクリメントを削除することをお勧めします。
  2. if(position < temp)temp を 2 回デクリメントし、もう一度比較しますか? if(position>temp)今は一時が小さいかもしれません->あなたが望むものではありません。

位置を直接使用して正しいテーブルを取得し、使用することをお勧めしますELSE IF's

于 2012-07-27T16:01:06.610 に答える