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