我之前已经完成了列表视图,无论是横向还是纵向,都会显示列表。但是,在我的新应用程序中,当我决定更改方向时,无论是横向还是横向,反之亦然,它都不会再次加载。我试图用sqlite数据库中的项填充listview。这是我的代码:
Attractions.java
public class Attractions extends ListActivity {
DataBaseHandler db = new DataBaseHandler(this);
ArrayList<Contact> imageArry = new ArrayList<Contact>();
ContactImageAdapter adapter;
int ctr, loaded;
int [] landmarkImages={R.drawable.oblation,R.drawable.eastwood,R.drawable.ecopark,R.drawable.circle};
String []landmarkDetails = { "Oblation", "Eastwood", "Ecopark", "QC Circle"};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_attractions);
ctr = db.checkContact(landmarkDetails[loaded]);
db.deleteAll();
// get image from drawable
/**
* CRUD Operations
* */
// Inserting Contacts
Log.d("Insert: ", "Inserting ..");
for(loaded=0; loaded <landmarkDetails.length;loaded++){
Bitmap image = BitmapFactory.decodeResource(getResources(),
landmarkImages[loaded]);
// convert bitmap to byte
ByteArrayOutputStream stream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte imageInByte[] = stream.toByteArray();
Log.d("Going to load images", "Image "+ loaded);
Log.d("Goind to load objects", "loading");
if(ctr == 0){
Log.d("Nothing Loaded", "Loading Now");
db.addContact(new Contact(landmarkDetails[loaded], imageInByte));}
Log.d(landmarkDetails[loaded], "Loaded!");
image.recycle();
}
// Reading all contacts from database
List<Contact> contacts = db.getAllContacts();
for (Contact cn : contacts) {
String log = "ID:" + cn.getID() + " Name: " + cn.getName()
+ " ,Image: " + cn.getImage();
// Writing Contacts to log
Log.d("Result: ", log);
//add contacts data in arrayList
imageArry.add(cn);
}
adapter = new ContactImageAdapter(this, R.layout.screen_list,
imageArry);
ListView dataList = (ListView) findViewById(android.R.id.list);
dataList.setAdapter(adapter);
}
更新
我在纵向模式下运行应用程序:列表存在,切换到横向时:不显示任何内容。我再次切换到肖像:列表再次出现。感谢那些愿意帮助的人!
UPDATE2
当我改变方向时,这些行没有被执行:
List<Contact> contacts = db.getAllContacts();
for (Contact cn : contacts) {
String log = "ID:" + cn.getID() + " Name: " + cn.getName()
+ " ,Image: " + cn.getImage();
// Writing Contacts to log
Log.d("Result: ", log);
//add contacts data in arrayList
imageArry.add(cn);
}
adapter = new ContactImageAdapter(this, R.layout.screen_list,
imageArry);
ListView dataList = (ListView) findViewById(android.R.id.list);
dataList.setAdapter(adapter);
我设置的消息没有出现在logcat上。请帮忙。 :(
答案 0 :(得分:0)
打开您的manifest.xml文件并更改Activity&lt;&gt;标记如下:然后检查
<
活动android:configChanges =“orientation”&gt;
这将避免重新创建活动。
答案 1 :(得分:0)
我可能知道,它是什么。此代码用于添加数据库元素:
if(ctr == 0){
Log.d("Nothing Loaded", "Loading Now");
db.addContact(new Contact(landmarkDetails[loaded], imageInByte));}
第一次,你的数据库是干净的。 checkContact结果为0,满足条件(ctr == 0),因此执行addContact。
第二次,DB在上次运行时“脏”(注意,检查联系人后调用db.deleteAll)。由于DB不干净,ctr!= 0,上面的代码永远不会执行。因此,db.getAllContacts()返回空数据,最后一个循环永远不会触发。
第三次你的数据库再次被清理,因为删除了所有,等等,等等!
一个漂亮可爱的错误,想不出更优雅的东西。 :)如果您阻止活动重新激活,则错误将会消失,除非外观取决于方向(例如纵向和横向的多个布局),否则它应该没问题。