0

以前にリストビューを実行しましたが、リストは横向きでも縦向きでも表示されています。ただし、私の新しいアプリでは、横向きから縦向きに、またはその逆に向きを変更しようとすると、再度読み込まれません。リストビューに sqlite データベースの項目を入力しようとしています。これが私のコードです:

アトラクション.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 に表示されません。助けてください。:(

4

2 に答える 2

1

manifest.xml ファイルを開き、次のように Activity<> タグを変更します。

<アクティビティ android:configChanges="orientation">

これにより、アクティビティの再作成が回避されます。

于 2013-11-11T04:17:49.530 に答える
0

私はおそらくそれが何であるかを知っています。このコードは、DB 要素を追加するために使用されます。

 if(ctr == 0){
        Log.d("Nothing Loaded", "Loading Now");
        db.addContact(new Contact(landmarkDetails[loaded], imageInByte));}

初めて、あなたのDBはきれいです。checkContact の結果は 0 で、条件 (ctr==0) が満たされたため、addContact が実行されます。

2 回目は、前回の実行から DB が「ダーティ」になっています (連絡先を確認した後に db.deleteAll が呼び出されることに注意してください)。DB はクリーンではないため、ctr != 0 であるため、上記のコードは実行されません。そのため、db.getAllContacts() は空のデータを返し、最後のループは起動しません。

3 回目は、deleteAll などの結果として、DB が再びクリーンになります。

素敵なかわいいエラーです。これ以上エレガントなものは考えられません。:)

アクティビティが再アクティブ化されないようにすると、エラーはなくなりますが、外観が向きに依存しない限り (たとえば、縦向きと横向きの複数のレイアウト)、問題はありません。

于 2013-11-11T05:00:13.500 に答える