10

私のレイアウトでは、いくつかの選択を行ういくつかのボタンと、データベースへのクエリを実行するための 1 つのボタンがあります。このクエリの結果は、ListViewこのレイアウト内に表示されます。

問題は、クエリを実行した後に画面を回転させると、がListView消えてクエリを再度実行する必要があることです。

これは、活動が再開したからだと思います。ここでの提案に従って、マニフェストのアクティビティと追加されandroid:configChanges="orientation|keyboardHidden"たコードに追加しました。

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.mylayout);

    }

しかし、これは機能していません。

私の活動の完全なコードは次のとおりです。

public class MyClass extends ListActivity implements OnClickListener, OnCheckedChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);

        // Creates the buttons and setOnClickListener and setOnCheckedChangeListener
    }

    @Override
    public void onClick(View v) {

        // Manages the buttons and their functions

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        // See what group in radio group is checked
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // After pressing one button, a query is made and a listview is shown. 
        // This it to handle the user choice after he clicks an item on the listview

    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.mylayout);

    }
}

私はこのような他の活動をしているので、これは奇妙です:

public class AtoZ extends ListActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.atoz);



    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);

    }

}   

これはまた、データベースへのクエリを実行し、それを に表示してからListView、ユーザーの選択を処理します。画面を回転させてListViewも表示されます。

私に何ができる?

4

5 に答える 5

9

マニフェスト ファイルの下のアクティビティで configChanges を使用します。

<activity
...
...
android:configChanges="orientation|screenSize|keyboard">
</activity

これは私にとってはうまくいきました。

于 2015-12-29T17:23:43.943 に答える
5

あなたの問題を解決できる2つのことがあります:

ソルバー A:

  1. マニフェスト xmlファイルに追加android:configChanges="orientation|keyboardHidden"します。
  2. 削除 onConfigurationChanged(Configuration newConfig)機能。

onCreate()アクティビティが初期化されるたびに 1 回だけ呼び出されるためです。onConfigurationChanged()空のデータで新しいビューをリロードして膨張させている間R.layout.mylayout=>リストはデータにバインドされません。

ソルバー B:

onCreate() で記述したデータ バインディング コードをオーバーライドメソッドonStart()またはに移動onResume()します。onStart()データバインディングの場合に使用することをお勧めします。

開発ページが表示されますAndroid Activity life cycle

(アップデート):

listContentリストアイテムの検索ボタンをクリックするとロードされるため、アクティビティ内のデータを維持してリストを再構築する必要があります(検索文字列など)。次に、onStart()このデータからリストを再構築します。

ただし、リストの項目をクリックしてリスト全体を変更するときのロジックは非常に奇妙です。onListItemClick(..)また、リスト項目のボタンがクリックされたときにも発生することに注意してください。

于 2012-08-29T11:37:50.403 に答える
3

onConfigurationChanged メソッドで setContentView を実行すると、ListView が再作成されます。データを ListView に再度ロードする必要があります。ListView をアダプターにバインドする場合は、onConfigurationChanged で行う必要があります。

于 2012-08-29T11:17:57.487 に答える
-1

向きを変更するときは、(保存しない場合は) クエリをやり直す必要があります。これが完了すると、oncreate が再度呼び出されるためです。

リストビューにあるデータを、共有設定のようなものに保存してみることができます。

于 2012-08-29T10:56:21.223 に答える