رفض Android popupwindow عند التبديل إلى علامة تبويب جديدة في الجدولة؟

StackOverflow https://stackoverflow.com/questions/4226898

سؤال

لديّ خريطة كواحدة من أربع علامات تبويب في جدولة. يمكن أن تطلق هذه الخريطة popupwindow وهي أسطورة. يبقى popupwindow على الشاشة ، أعلى الخريطة ، حتى يتم النقر على زر "Show Legend" مرة أخرى (ذهابًا وإيابًا ، إلخ).

المشكلة هي أنه عندما ينتقل المستخدم إلى علامة تبويب أخرى ، يظل Popupwindow ثابتًا على العرض.

لقد حاولت تنفيذ طريقة ONPAUSE () في فئة MAPACTIVY ، ورفضها من هناك. تغلق قوة التطبيق مع هذه الطريقة في مكانها.

أي مساعدة؟ شكرًا!

تحرير: إليك بعض الكود الخاص بي:

في النشاط الرئيسي ، الذي يحدد علامات التبويب الأربعة:

    Resources res = getResources(); // Resource object to get Drawables
    TabHost tabHost = getTabHost();  // The activity TabHost
    TabHost.TabSpec spec;  // Reusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, FirstActivity.class);

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("game").setIndicator("First",
                      res.getDrawable(R.drawable.ic_tab_game))
                  .setContent(intent);
    tabHost.addTab(spec);

    // Do the same for the other tabs
    intent = new Intent().setClass(this, SecondActivity.class);
    spec = tabHost.newTabSpec("alerts").setIndicator("Second",
                      res.getDrawable(R.drawable.ic_tab_alert))
                  .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, MapActivity.class);
    spec = tabHost.newTabSpec("map").setIndicator("Map",
                      res.getDrawable(R.drawable.ic_tab_map))
                  .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, LastActivity.class);
    spec = tabHost.newTabSpec("experience").setIndicator("Last",
                      res.getDrawable(R.drawable.ic_tab_experience))
                  .setContent(intent);
    tabHost.addTab(spec);

    tabHost.setCurrentTab(0);

الآن في فصل الخريطة (الذي يمتد النشاط الخبيث):

    // Declare the Legend PopupWindow
    mapLegendInflater = (LayoutInflater) MapActivity.this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mapLegendPopupLayout = mapLegendInflater.inflate(
            R.layout.maptablegendpopuplayout, null, false);
    mapLegendPopup = new PopupWindow(mapLegendPopupLayout,
            (int) (0.45 * getApplicationContext().getResources()
                    .getDisplayMetrics().widthPixels),
            (int) (0.33 * getApplicationContext().getResources()
                    .getDisplayMetrics().heightPixels), true);
    mapLegendPopup.setFocusable(false);
    mapLegendPopup.setOutsideTouchable(true);

            Boolean legendIsShown = false;

    mapLegendButton = (Button) findViewById(R.id.buttonMapLegend);
    mapLegendButton.setOnClickListener(mapLegendListener);


private OnClickListener mapLegendListener = new OnClickListener() {
    public void onClick(View v) {
        // Launch or dismiss the map legend popup
        if (legendIsShown) {
            mapLegendPopup.dismiss();
            mapLegendButton.getBackground().clearColorFilter();
            legendIsShown = false;
        } else {
            mapLegendPopup.showAtLocation(
                    findViewById(R.id.buttonMapLegend), Gravity.TOP
                            | Gravity.LEFT, 8,
                    (int) (0.23 * getApplicationContext().getResources()
                            .getDisplayMetrics().heightPixels));
            mapLegendButton.getBackground().setColorFilter(
                    new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000));
            // mapLegendButton.getBackground().setColorFilter(0xFFFFFF00,
            // PorterDuff.Mode.MULTIPLY);
            legendIsShown = true;
        }
    }
};

آمل أن يوفر هذا فكرة عن المكان الذي أكون فيه. كل شيء يعمل بشكل جيد في علامة التبويب الخريطة. فقط عندما يكون لديك الأسطورة معروضة وتبديل علامات تبويب أنه لا يزال يتم عرضه على طرق عرض أخرى.

هل كانت مفيدة؟

المحلول

أعلم أنك قلت إن تنفيذ ONPAUSE () لم يعمل من أجلك ، لكنني جربته وتنفيذ onResume () و onPause () في النشاط الخريطة.

كنت بحاجة إلى القيام بعرض

package com.esri.android.tabdemo;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;

public class MapActivity extends Activity
{
    private TextView textView = null;
    private PopupWindow popupWindow = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        textView = new TextView(this);
        textView.setText("Hello World from MapActivity");
        setContentView(textView);
    }

    @Override
    protected void onPause()
    {
        super.onPause();
        if (popupWindow != null)
        {
            popupWindow.dismiss();
            popupWindow = null;
        }
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        final Context context = this;
        textView.post(
            new Runnable()
            {
                public void run()
                {
                    popupWindow = new PopupWindow(context);
                    LinearLayout linearLayout = new LinearLayout(context);
                    linearLayout.setOrientation(LinearLayout.VERTICAL);
                    Button button = new Button(context);
                    button.setText("Hello");
                    button.setOnClickListener(new OnClickListener()
                    {
                        public void onClick(View v)
                        {
                            Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show();
                        }
                    });
                    linearLayout.addView(button);
                    popupWindow.setContentView(linearLayout);
                    popupWindow.showAtLocation(linearLayout, Gravity.LEFT | Gravity.BOTTOM, 10, 10);
                    popupWindow.update(256, 64);
                }
            }
        );
    }
}

نصائح أخرى

يمكنك بدء popupwindown مثل هذا:

mapLegendPopup = new PopupWindow(this);
mapLegendPopup.setContentView (itemizeView);
mapLegendPopup.setBackgroundDrawable (new BitmapDrawable()); // key is here
mapLegendPopup.setWidth ((int) (0.45 * getApplicationContext().getResources()
                    .getDisplayMetrics().widthPixels));
mapLegendPopup.setHeight((int) (0.33 * getApplicationContext().getResources()
                    .getDisplayMetrics().heightPixels));
mapLegendPopup.setFocusable(false);
mapLegendPopup.setOutsideTouchable(true);

يجب عليك إدارة الحوار الخاص بك باستخدام طريقة onCreatedialog () ، على النحو الموصى به من خلال الإطار.

وبهذه الطريقة ، سيصبح حوارك جزءًا من نشاطك وسيفعل ذلك بنفسه.

إذا كنت لا ترغب حقًا في استخدام ذلك (لا يمكنني رؤية أي سبب من الأسباب التي تجعل هذا هو الحال ، ولكن لا يزال) ، فيمكنك استخدام setowneractivity () في مربع الحوار الخاص بك لتعيينه لنشاطك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top