0

私のアプリでは 、縦向きモードで1つの列を表示するときにgridviewを使用しています。ランドスケープ モードでは、2 列を表示するように定義された新しいレイアウト。

これがアプリの仕組みです..アプリが起動されると、進行状況ダイアログが呼び出されてsqliteデータベースからWebサイト名がロードされ、非同期が使用されてsqlite dbからWebサイトがロードされます。グリッドビューが膨張した後、進行状況ダイアログは閉じられます。

Web サイト名を gridview にロードした後、画面の向きが変更され、進行状況ダイアログが再起動されます。

画面の向きを変更すると、ondestroy() が呼び出されてから oncreate() が呼び出されることを知っています。

これは私のアプリの src コードです。

public class RSSReaderActivity extends Activity {

    private ProgressDialog pDialog;
    ArrayList<HashMap<String, String>> rssFeedList;
    RSSParser rssParser = new RSSParser();
    RSSFeed rssFeed;
    Button add_rss;
    // array to trace sqlite ids
    String[] sqliteIds;
    public static String TAG_ID = "id";
    public static String TAG_TITLE = "title";
    public static String TAG_LINK = "link";
        GridView gridview;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.site_list);

        add_rss = (Button) findViewById(R.id.add_rss);
        gridview = (GridView) findViewById(R.id.gridview);
        rssFeedList = new ArrayList<HashMap<String, String>>();

        new loadStoreSites().execute();
        gridview.setOnItemClickListener(new OnItemClickListener() {
        ...
        ...
        );

        add_rss.setOnClickListener(new View.OnClickListener() {
            ...
            ...
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // if result code 100
        if (resultCode == 100) {
            // reload this screen again
            Intent intent = getIntent();
            finish();
            startActivity(intent);
        }
    }
    class loadStoreSites extends AsyncTask<String, String, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ...
            ...
        }
        @Override
        protected String doInBackground(String... args) {
            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
                    RSSDatabaseHandler rssDb = new RSSDatabaseHandler(getApplicationContext());

                    // listing all websites from SQLite
                    List<WebSite> siteList = rssDb.getAllSites();

                    sqliteIds = new String[siteList.size()];

                    // loop through each website
                    for (int i = 0; i < siteList.size(); i++) {

                        WebSite s = siteList.get(i);

                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        map.put(TAG_ID, s.getId().toString());
                        map.put(TAG_TITLE, s.getTitle());
                        map.put(TAG_LINK, s.getLink());

                        // adding HashList to ArrayList
                        rssFeedList.add(map);

                        // add sqlite id to array
                        // used when deleting a website from sqlite
                        sqliteIds[i] = s.getId().toString();
                    }
                    gridview.setAdapter(new SimpleAdapter(RSSReaderActivity.this,rssFeedList, R.layout.site_list_row,new String[] { TAG_ID, TAG_TITLE, TAG_LINK },new int[] { R.id.sqlite_id, R.id.title, R.id.link }));
                    registerForContextMenu(gridview);
                }
            });
            return null;
        }

        protected void onPostExecute(String args) {
            // dismiss the dialog after getting all products
            pDialog.dismiss();
        }

        }
      }

ここで onsavedinstance() をどのように使用するのですか..誰か私を案内してください。

4

1 に答える 1

2

これをmenifestファイルに追加します

  android:configChanges="keyboardHidden|orientation|screenSize"
于 2013-08-29T10:05:04.283 に答える