0

現在のアクティビティをロードしたくないという問題があります

 Activity currentActivity = getCurrentActivity();

別のアクティビティをロードしたい...

TabActivity MainTabView = (TabActivity) getParent();
TabHost tabhost = MainTabView.getTabHost();
tabhost.setCurrentTab(1); // Artikelliste
Activity currentActivity = MainActivity; // what i want to load is called MainActivity (doesn't work)
((MainActivity) currentActivity).reload("22"); // Call the public function of MainActivity.

タブ アクティビティ 1 の内容をリロードしたい。タブに切り替えて、リストビュー コントロールの内容をリロードします。

私はアンドロイド開発の新人です。私が欲しいものが明確であることを願っています:-)

MainActivity のリロード機能、これが後で機能するかどうかはわかりません。

 public void reload(String strCatID) {
        // Artikeldatenbank laden als Thread
        downloadJTLShopArtikeldatenbank("http://www.xyz.com/connector/jtl-shop-connector.php?modus=artikelliste&iCatID="+ strCatID);

        // Artikel öffnen im Shop
        lvwArtikel = (ListView) findViewById(R.id.lvwArtikelansicht);
        lvwArtikel.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int position, long arg)   {
                View grid;
                if (view == null) {
                    grid = null;
                } else {
                    grid = view;
                }
                // Abrufen aus dem aktiven Listview Eintrag (ArtikelID)
                TextView txtArtikelID = (TextView) grid.findViewById(R.id.txtArtikelID);

                // Neues Intent öffnen und die aktuelle Kategorie ID übergeben
                Intent i = new Intent(MainActivity.this, MainItemsDetail.class);

                i.putExtra("iArtikelID", txtArtikelID.getText());
               /* tabHost.addTab(tabHost.newTabSpec("tab-2")
                        .setIndicator("Artikel")
                        .setContent(i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                        .setContent(i)); */
                //.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

                startActivityForResult(i, 0);
            }
        });
    }

必要なタブを含む MainTabView

    final TabHost tabHost = getTabHost();
    // Kategorieliste
    TabHost.TabSpec ts1 = tabHost.newTabSpec("tab-1");
    ts1.setIndicator("Kategorie");
    Intent intent1 = new Intent(MainTabView.this,MainCategory.class);
    //ts1.setContent(intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    ts1.setContent(intent1);
    tabHost.addTab(ts1);

    //progressDialog = ProgressDialog.show(MainTabView.this, "",
    //        "Kategorien werden geladen");

    // Artikelliste
    TabHost.TabSpec ts2 = tabHost.newTabSpec("tab-2");
    ts2.setIndicator("Artikel");
    Intent intent2 = new Intent(MainTabView.this,MainActivity.class);
    //ts2.setContent(intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    ts2.setContent(intent2);
    tabHost.addTab(ts2);

    //progressDialog = ProgressDialog.show(MainTabView.this, "",
    //        "Artikel werden geladen");

    // Warenkorb hinzufügen
    TabHost.TabSpec ts3 = tabHost.newTabSpec("tab-3");
    ts3.setIndicator("Warenkorb");
    Intent intent3 = new Intent(MainTabView.this,MainCart.class);
    //ts3.setContent(intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    ts3.setContent(intent3);
    tabHost.addTab(ts3);

    //progressDialog = ProgressDialog.show(MainTabView.this, "",
    //        "Artikel werden geladen");
    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
        @Override
        public void onTabChanged(String tabId) {
            Activity currentActivity = getCurrentActivity();
            if (currentActivity instanceof MainActivity) {
                ((MainActivity) currentActivity).reload("22");
            }
        }
    });
   }

コード内のドイツ語のコメントで申し訳ありません。

私が本当に欲しいのは、MainCategoryTab から MainActivityTab (項目リスト) に切り替えることです。拡張可能なリストビューで OnClick イベントに反応したいと考えています。MainActivity に切り替えて、アイテム一覧をリロードしたい。

4

2 に答える 2

0

getLocalActivityManager.getActivity() で新しい方法を試しましたが、null ポインターがスローされます。getLocalActivityManager を呼び出すには、ActivityGroup である必要がありました。

        Activity currentActivity = (MainActivity) getLocalActivityManager().getActivity("MainActivity");
        ((MainActivity) currentActivity).reload(txtCatID.getText().toString());

これを行う方法は間違っていると思います。

于 2013-09-13T11:47:52.970 に答える
0

MainActivityが現在のアクティビティ ( TabActivity) を開始している場合は、 startActivityForResult() / setResult()メソッドを使用できます。docsから取られたワークフローの説明は次のとおりです。

アクティビティの終了時にアクティビティから結果を取得したい場合があります。たとえば、ユーザーが連絡先のリストから人を選択できるようにするアクティビティを開始できます。終了すると、選択された人物が返されます。これを行うには、呼び出しを識別する 2 番目の整数パラメーターを使用して startActivityForResult(Intent, int) バージョンを呼び出します。結果は onActivityResult(int, int, Intent) メソッドを通じて返されます。

アクティビティが終了すると、 setResult(int) を呼び出してデータを親に返すことができます。常に結果コードを提供する必要があります。これは、標準の結果 RESULT_CANCELED、RESULT_OK、または RESULT_FIRST_USER で始まる任意のカスタム値にすることができます。さらに、オプションで、必要な追加データを含む Intent を返すことができます。この情報はすべて、最初に提供された整数識別子とともに、親の Activity.onActivityResult() に表示されます。

アクティビティがバックグラウンドにある間は、必要に応じて停止して再作成することができます - Android OS はメモリ使用を最適化するためにこれを行います。したがって、変更される可能性があるため、親アクティビティへの参照に依存することはできません。

MainActivityとのソース コードを追加してTabActivityいただければ、必要な変更をお手伝いできます。

于 2013-09-13T09:38:27.277 に答える