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 中的内容。我切换到选项卡并重新加载列表视图控件中的内容。

我是android开发的新手。我希望很清楚我想要什么:-)

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

如果MainActivity正在开始您当前的活动 ( TabActivity),您可以使用startActivityForResult() / setResult()方法。以下是从文档中获取的工作流程的解释:

有时您想在活动结束时从活动中获取结果。例如,您可以启动一个活动,让用户在联系人列表中选择一个人;当它结束时,它会返回被选中的人。为此,您调用 startActivityForResult(Intent, int) 版本,并带有标识调用的第二个整数参数。结果将通过您的 onActivityResult(int, int, Intent) 方法返回。

当一个活动退出时,它可以调用 setResult(int) 将数据返回给它的父级。它必须始终提供结果代码,可以是标准结果 RESULT_CANCELED、RESULT_OK 或任何以 RESULT_FIRST_USER 开头的自定义值。此外,它还可以选择返回一个 Intent,其中包含它想要的任何附加数据。所有这些信息连同它最初提供的整数标识符一起出现在父级的 Activity.onActivityResult() 上。

当您的活动在后台时,它们可以在需要时停止并重新创建 - Android 操作系统这样做是为了优化内存使用。因此,不可能依赖对您的父活动的引用,因为它可能会改变。

如果您可以为您的MainActivityand添加源代码TabActivity,我可以帮助您进行所需的更改。

于 2013-09-13T09:38:27.277 回答
0

我用 getLocalActivityManager.getActivity() 尝试了一种新方法,但它抛出了一个空指针。要调用 getLocalActivityManager,我必须是 ActivityGroup。

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

我认为这是错误的做法。

于 2013-09-13T11:47:52.970 回答