ViewPager.setCurrentItem显示上一个项目而不是所选项目

时间:2016-02-16 09:57:08

标签: android sqlite android-viewpager

ViewPager.setCurrentItem显示上一个项目而不是所选项目。我试图从sqlite数据库显示列表视图。

数据在列表视图中正确显示,onitemclick它应该将该位置作为意图传递给具有viewpager的下一个活动。

viewpager工作正常并显示所有数据,但ViewPager.setCurrentItem除了显示与作为意图的位置发送相关的数据的简单任务外,显示了前一项。

需要做些什么来准确显示所选项目。

这是listactivity代码

public class MainActivity extends ListActivity {
    private static final String DB_NAME = "db.sqlite";
    private static final String TABLE_NAME = "Posts";
    private static final String FRIEND_ID = "col_2";
    private static final String FRIEND_NAME = "col_3";

    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList<String> friends;

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

        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();

        fillFreinds();
        setUpList();
    }

    private void setUpList() {

        setListAdapter(new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1, friends));
        listView = getListView();

        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                int position,long id) {
                Toast.makeText(getApplicationContext(),
                            ((TextView) view).getText().toString(),
                             Toast.LENGTH_SHORT).show();
                //startActivity(new Intent(getApplicationContext(), viepagerActivity.class));
                Intent i = new Intent(MainActivity.this, viepagerActivity.class);
                i.putExtra("position", position);
                MainActivity.this.startActivity(i);

            }
        });
    }


    private void fillFreinds() {
        friends = new ArrayList<String>();
        Cursor friendCursor = database.query(TABLE_NAME,
                                             new String[]
                                             {FRIEND_ID, FRIEND_NAME},
                                             null, null, null, null
                                             , FRIEND_ID);
        friendCursor.moveToFirst();
        if(!friendCursor.isAfterLast()) {
            do {
                String name = friendCursor.getString(0);
                friends.add(name);
            } while (friendCursor.moveToNext());
        }
        friendCursor.close();
    }
}

这是Viewpager活动

public class viepagerActivity extends Activity {

    private List<String> testContactName = new ArrayList<String>();
    private List<String> testContactNumber = new ArrayList<String>();
    MyAdapter mAdapter;
    public ViewPager mViewPager;
    private ExternalDbOpenHelper databaseHelper;
    private SQLiteDatabase database;
    private static final String DB_NAME = "db.sqlite";

    private static final String TABLE_NAME = "Posts";
    private static final String FRIEND_ID = "col_2";
    private static final String FRIEND_NAME = "col_3";

    private ListView listView;
    private ArrayList<String> friends;
    WebView webView;
    String mimeType = "text/html";
    String encoding = "utf-8";
    int index;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main1);
        databaseHelper = new  ExternalDbOpenHelper(this, DB_NAME);
        database = databaseHelper.openDataBase();
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mAdapter = new MyAdapter();

        if (mViewPager.getAdapter() != null)
            mViewPager.setAdapter(null);
        mViewPager.setAdapter(mAdapter);

        Bundle b = getIntent().getExtras();
        index = b.getInt("position");

        mViewPager.postDelayed(new Runnable() {
            @Override
            public void run() {
                mViewPager.setCurrentItem(index);
            }
        }, 10);

        try {
            getAllContacts();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void getAllContacts() {
        //SQLiteDatabase db = databaseHelper.database;

        Cursor cursor = database.query(TABLE_NAME,
                 new String[] 
                 {FRIEND_ID, FRIEND_NAME},
                 null, null, null, null
                 , null);

        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex(cursor
                    .getColumnName(0)));
            String phoneNumber = cursor.getString(cursor.getColumnIndex(cursor
                    .getColumnName(1)));

            testContactName.add(name);
            mAdapter.notifyDataSetChanged();

            testContactNumber.add(phoneNumber);
            mAdapter.notifyDataSetChanged();
        }

        cursor.close();
    }

    private class MyAdapter extends PagerAdapter {

        public MyAdapter() {
            super();
        }

        @Override
        public int getCount() {
            return testContactName.size();
        }

        @Override
        public boolean isViewFromObject(View collection, Object object) {
            return collection == ((View) object);
        }

        @Override
        public Object instantiateItem(View collection, final int  position) {
            Bundle b = getIntent().getExtras();

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

            View view = inflater.inflate(R.layout.viewpager_items, null);

            TextView contactName = (TextView) view.findViewById(R.id.labelText);
//          TextView contactNumber = (TextView) view
//                  .findViewById(R.id.answerText);

            webView = (WebView)findViewById(R.id.webview);


            try {
                //contactName.setText(testContactName.get(position));
                contactName.setText("Details");

                //contactNumber.setText(testContactNumber.get(position));
                String pish = "<html><head><style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///assets/DroidHindi.ttf\")}body {font-family: MyFont;font-size: medium;text-align: justify;}</style></head><body>";
                String pas = "</body></html>";
                String myHtmlString = pish + testContactNumber.get(position) + pas;
                //webView.loadData(myHtmlString, mimeType, encoding);

                        webView.loadDataWithBaseURL("", testContactNumber.get(position), "text/html", "UTF-8", null);
                    }
                    catch(Exception e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

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

                    return view;
                }

                @Override
        public void destroyItem(View collection, int position, Object view) {
            ((ViewPager) collection).removeView((View) view);
            mAdapter.notifyDataSetChanged();
        }
    }
}

0 个答案:

没有答案