2016-11-17 19 views
0

ListViewは、アクティビティが初めて実行されたときに作成されます。アクティビティーを再作成した後、リストには値が入力されません。私がアプリから戻ってもう一度開くと、正しく動作しません。しかし、私はそれをタスクメニューから削除し、再び開くと、それは動作します。また、ArrayAdapterはonResumeとonImagesRetrievedで異なるカウント(getCount)を持ちます。なぜこれが起こっているのかについてのアイデアはありますか?アクティビティが再起動された後にAndroid ListViewが生成されない

public class GalleryActivity extends Activity implements ImagesDatabaseHelper.ImageDatabaseCallbacks { 
    private static final int NUMEBR_OF_IMAGES = 10; 
    private ArrayAdapter arrayAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_gallery); 
     arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, new ArrayList()); 
     ((ListView)findViewById(R.id.lv_titles)).setAdapter(arrayAdapter); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     ImagesDatabaseHelper.getInstance(this, NUMEBR_OF_IMAGES).retrieveImages(); 
    } 

    @Override 
    public void onImagesRetrieved(List<Image> images) { 
     Toast.makeText(this, "Successfully got " + images.size() + " images", Toast.LENGTH_LONG).show(); 
     arrayAdapter.clear(); 
     arrayAdapter.addAll(images); 
     arrayAdapter.notifyDataSetChanged(); 
    } 
} 
+0

データが表示されなくても、毎回「トースト」が表示されますか? – Bills

+0

はい、毎回トーストが表示されます。 – swift

答えて

0

public class GalleryActivity extends Activity implements ImagesDatabaseHelper.ImageDatabaseCallbacks { 
    private static final int NUMEBR_OF_IMAGES = 10; 
    private ArrayAdapter arrayAdapter; 
    List<Image> dataset = new ArrayList(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_gallery); 
     arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, dataset); 
     ((ListView)findViewById(R.id.lv_titles)).setAdapter(arrayAdapter); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     ImagesDatabaseHelper.getInstance(this, NUMEBR_OF_IMAGES).retrieveImages(); 
    } 

    @Override 
    public void onImagesRetrieved(List<Image> images) { 
     Toast.makeText(this, "Successfully got " + images.size() + " images", Toast.LENGTH_LONG).show(); 
     dataset.clear(); 
     dataset.addAll(images); 
     arrayAdapter.notifyDataSetChanged(); 
    } 
} 
+0

これは実際に最初に実装した方法です。動作しません、同じ動作。 – swift

+0

'onImagesRetrieved'メソッドの' images'のサイズはどれくらいですか? –

+0

10である必要があります。デバッグすると、リストに正しいデータが含まれていることがわかります。 – swift

0

、これを試してみてください、このお試しください:この問題は、固定の静的フィールドにArrayAdapterを変更

public class GalleryActivity extends Activity implements ImagesDatabaseHelper.ImageDatabaseCallbacks { 
private static final int NUMEBR_OF_IMAGES = 10; 
private ArrayAdapter arrayAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gallery); 
    ImagesDatabaseHelper.getInstance(this, NUMEBR_OF_IMAGES).retrieveImages(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    ImagesDatabaseHelper.getInstance(this, NUMEBR_OF_IMAGES).retrieveImages(); 
} 

@Override 
public void onImagesRetrieved(List<Image> images) { 
    Toast.makeText(this, "Successfully got " + images.size() + " images", Toast.LENGTH_LONG).show(); 
    arrayAdapter.clear(); 
    arrayAdapter.addAll(images); 
    arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, images); 
    ((ListView)findViewById(R.id.lv_titles)).setAdapter(arrayAdapter); 
    // arrayAdapter.notifyDataSetChanged(); 
} 
} 
+0

onImagesRetrievedでアダプタを作成して設定しようとしましたが、同じ、壊れた動作があります。 – swift

+0

今すぐ確認してください。あなたはあなたのarraylist準備ができていると期待しています。 –

+0

'onImagesRetrieved'が呼び出されるとき、imagesパラメータは正しいデータを持ちます。 ListViewに文字列を表示しています。 – swift

関連する問題