Java 用光标、Viewpager中的数据填充数组
我试图用游标中的数据填充数组,但如何填充呢?这是我的代码:Java 用光标、Viewpager中的数据填充数组,java,arrays,sqlite,android-viewpager,cursor,Java,Arrays,Sqlite,Android Viewpager,Cursor,我试图用游标中的数据填充数组,但如何填充呢?这是我的代码: public class Tab3Up extends Activity { private HipotecaDbAdapter dbAdapter; private Cursor cursor; private long id ; @Override public void onCreate(Bundle savedInstanceState) { supe
public class Tab3Up extends Activity {
private HipotecaDbAdapter dbAdapter;
private Cursor cursor;
private long id ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imageslide);
ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageArra);
ViewPager myPager = (ViewPager) findViewById(R.id.view_pager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(0);
dbAdapter = new HipotecaDbAdapter(this);
dbAdapter.abrir();
cursor = dbAdapter.getRegistro(id);
}
private int imageArra[] = { R.drawable.foto1, R.drawable.foto2,
R.drawable.foto3, R.drawable.foto4, };
和我的适配器:
public class ViewPagerAdapter extends PagerAdapter {
Activity activity;
int imageArray[];
public ViewPagerAdapter(Activity act, int[] imgArra) {
imageArray = imgArra;
activity = act;
}
public int getCount() {
return imageArray.length;
}
//MORE CODE HERE....
有了这段代码,我的应用程序运行得很好,但我需要更改主代码,用sqlite-bd
中的数据填充数组。Mysqlite bd
有一个保存所有图像路径的字段
像这样的
ArrayList<Integer> array=new ArrayList<Integer>();
if (cursor.moveToFirst()) {
do {
array.add(cursor.getInt(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_FOTO1))); //<< pass column index here instead of i
} while (cursor.moveToNext());
}
//fotos[0] = (Integer[])array.toArray(new Integer[array.size()]);
ArrayList数组=新的ArrayList();
if(cursor.moveToFirst()){
做{
array.add(cursor.getInt(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_FOTO1));/这并不是对您问题的真正回答,但是,我也从sqlite中提取数据并将其显示在视图页面中。在这里,我尝试提取联系人信息(姓名和电话号码)。每个联系人信息都将显示在不同的屏幕中
我是这样做的:
Step 1: in my on create method, I am setting my adapter that I have made to display specific content.
public class ViewTest extends Activity {
private List<String> testContactName = new ArrayList<String>();
private List<String> testContactNumber = new ArrayList<String>();
MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_layout);
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
mAdapter = new MyAdapter();
mViewPager.setAdapter(mAdapter);
try {
getAllContacts();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Step 2 : Just getting all contacts from the database and adding the values to my arraylist.
public void getAllContacts() {
Cursor cursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
null,
null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC");
// Looping through the contacts and adding them to arrayList
while (cursor.moveToNext()) {
String name = cursor
.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = cursor
.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
testContactName.add(name);
mAdapter.notifyDataSetChanged();
Log.i("Name: " + "" + "---", name);
testContactNumber.add(phoneNumber);
mAdapter.notifyDataSetChanged();
Log.i("Number: " + "" + "---", phoneNumber);
}
cursor.close();
}
Step 3: Defining my adapter.
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, int position) {
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);
try {
contactName.setText(testContactName.get(position));
contactNumber.setText(testContactNumber.get(position));
} 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();
}
}
步骤1:在我的on create方法中,我正在设置我制作的适配器以显示特定内容。
公共类ViewTest扩展了活动{
私有列表testContactName=new ArrayList();
私有列表testContactNumber=new ArrayList();
MyAdapter mAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager\u布局);
ViewPager mViewPager=(ViewPager)findViewById(R.id.pager);
mAdapter=新的MyAdapter();
mViewPager.setAdapter(mAdapter);
试一试{
getAllContacts();
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
第2步:从数据库中获取所有联系人,并将这些值添加到我的arraylist中。
public void getAllContacts(){
Cursor Cursor=getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
无效的
无效的
无效的
Contacts contract.CommonDataTypes.Phone.DISPLAY\u NAME
+“核对本地化ASC”);
//循环浏览联系人并将其添加到arrayList
while(cursor.moveToNext()){
字符串名称=游标
.getString(游标
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME));
字符串phoneNumber=光标
.getString(游标
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
testContactName.add(name);
mAdapter.notifyDataSetChanged();
Log.i(“名称:“+”+“--”,名称);
testContactNumber.add(电话号码);
mAdapter.notifyDataSetChanged();
Log.i(“号码:“+”+“--”,电话号码);
}
cursor.close();
}
步骤3:定义我的适配器。
私有类MyAdapter扩展了PagerAdapter{
公共MyAdapter(){
超级();
}
@凌驾
public int getCount(){
返回testContactName.size();
}
@凌驾
公共布尔值isViewFromObject(视图集合,对象){
返回集合==((视图)对象);
}
@凌驾
公共对象实例化项(视图集合,int位置){
LayoutInflater充气器=(LayoutInflater)集合。getContext()
.getSystemService(上下文布局\充气机\服务);
视图=充气机。充气(R.layout.viewpager_项,空);
TextView contactName=(TextView)view.findViewById(R.id.labelText);
TextView联系人号码=(TextView)视图
.findviewbyd(R.id.answerText);
试一试{
setText(testContactName.get(position));
contactNumber.setText(testContactNumber.get(position));
}捕获(异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
((ViewPager)集合).addView(视图,0);
返回视图;
}
@凌驾
公共项(视图集合、int位置、对象视图){
((ViewPager)集合)。移除视图((视图)视图);
mAdapter.notifyDataSetChanged();
}
}
}
最后,布局:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>
如果需要viewpager_items.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_dark"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/labelText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:background="@android:color/background_dark"
android:gravity="left"
android:text="Loading..."
android:textColor="#FFFFFF"
android:textSize="24sp"
android:textStyle="bold"
android:typeface="sans" />
<View
android:layout_width="match_parent"
android:layout_height="3dp"
android:background="@android:color/background_dark" />
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/answerText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:gravity="left"
android:padding="5dp"
android:text="Loading.."
android:textColor="#FFFFFF"
android:textSize="24sp" />
</ScrollView>
</LinearLayout>
希望这能让你对你的问题有所了解
希望这也能帮助其他观众:)到底是什么问题?你无法从游标获取数组?你无法将此数组发送到ViewPagerAdapter?两者都是,我不知道如何处理数组,首先我需要将数据从游标发送到数组,然后再发送到ViewPagerAdapter。最后一段代码是我最后一次尝试。这非常有用。But当我添加几个文本视图
和按钮
时,滑动速度变慢了。有什么想法吗?@PranjalCholadhara在某种程度上是正确的,但这是旧的。我认为有很多新的库来处理sqlite,例如Realm:以及使用CursorAdapter实现的回收器视图。我已经准备好了代码,但没有幸运的是,我没有太多的时间根据这些问题的需要重新创建这些东西。但是,是的,这两个库值得一看:)