“后退”按钮用WebView关闭共享对话框和子活动

时间:2012-11-03 13:48:26

标签: android android-intent

我有Activity(ListView),它打开了包含WebView的子活动。然后我从WebView打开共享对话框。但是当我按下“返回”按钮时,它会关闭共享对话框和子活动。如何使“后退”按钮仅关闭共享对话框?

非常感谢!

public class Journal extends Activity {
    private ViewFlow viewFlow;
    int page = 0;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.circle_layout);
             page = getIntent().getExtras().getInt("new_page");
        viewFlow = (ViewFlow) findViewById(R.id.viewflow);
        viewFlow.setAdapter(new JournalAdapter(this, page), 0);
        CircleFlowIndicator indic = (CircleFlowIndicator) findViewById(R.id.viewflowindic);
        viewFlow.setFlowIndicator(indic);
    } 
}

public class JournalAdapter extends BaseAdapter {
...
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        int _id = 0, rid = 0;
        int N = num;
        String url = "http://lookuper.ru/LookuperServer/journal/URL/index.html";
        if (position == 0) {
            _id = R.id.wv1;
            rid = R.layout.webview_1;
        } 

        url = url.replace("URL", String.valueOf(num - position));

        Tools.messageToLog("  =~=  getView() :: num = " + (num + position) + "; pos = " + position + ";  URL = " + url);
        convertView = mInflater.inflate(rid, null);

        final WebView wv = (WebView) convertView.findViewById(_id);
        wv.setWebChromeClient(new WebChromeClient());
        wv.setPadding(0, 0, 0, 0);
        wv.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        wv.requestFocus(View.FOCUS_DOWN|View.FOCUS_UP);
        wv.getSettings().setLightTouchEnabled(true);        

        // wv.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
        wv.getSettings().setUseWideViewPort(true);
        wv.getSettings().setLoadWithOverviewMode(true);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.addJavascriptInterface(new Object() {
            public void performClick() {
                showShare("Product", "http://product.com");
            }
        }, "share");
        wv.addJavascriptInterface(new Object() {
            public void performClick() {
                ((Activity) context).finish();
            }
        }, "closeActivity");
        wv.loadUrl(url);
        final Activity MyActivity = (Activity) context;
        final ProgressBar v = (ProgressBar) MyActivity.findViewById(R.id.ProgressBar01);
        wv.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                v.setProgress(progress * 100);
                if (progress == 100)
                    v.setVisibility(ProgressBar.GONE);
            }
        }); 
        
        wv.setOnTouchListener(new View.OnTouchListener() { 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) { 
                           case MotionEvent.ACTION_DOWN: 
                           case MotionEvent.ACTION_UP: 
                               if (!v.hasFocus()) { 
                                   v.requestFocus(); 
                               } 
                               break; 
                       } 
                       return false; 
                    }
            });
        return convertView;
    }

    private void showShare(String subject, String URL) {
        List<Intent> targetedShareIntents = new ArrayList<Intent>();
        Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        Intent vk = null, tw = null, wa = null, gm = null, mms = null, mail = null, fb = null;

        List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(shareIntent, 0);
        if (!resInfo.isEmpty()) {
            for (ResolveInfo resolveInfo : resInfo) {
                String packageName = resolveInfo.activityInfo.packageName;
                Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
                targetedShareIntent.setType("text/plain");
                targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
                if (packageName.contains("com.facebook.katana")) {
                    targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, URL);
                    targetedShareIntent.setPackage(packageName);
                    fb = targetedShareIntent;
                } else if (packageName.contains("com.vkontakte.android")) {
                    targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, URL);
                    targetedShareIntent.setPackage(packageName);
                    vk = targetedShareIntent;
                } else if (packageName.equalsIgnoreCase("com.google.android.gm")) {
                    targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, URL);
                    targetedShareIntent.setPackage(packageName);
                    gm = targetedShareIntent; 
                } else if (packageName.contains("com.whatsapp")) {
                    targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, URL);
                    targetedShareIntent.setPackage(packageName);
                    wa = targetedShareIntent;
                } else if (packageName.contains("mail")) {
                    targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, URL);
                    targetedShareIntent.setPackage(packageName);
                    mail = targetedShareIntent;
                } else if (packageName.contains("com.android.mms")) {
                    targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, URL);
                    targetedShareIntent.setPackage(packageName);
                    mms = targetedShareIntent;
                } else if (packageName.contains("com.twitter.android")) {
                    targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, URL);
                    targetedShareIntent.setPackage(packageName);
                    tw = targetedShareIntent;
                } 
            }

            Intent chooserIntent = Intent.createChooser(mms, "VK");

            Parcelable [] parcelable = new Parcelable [6];
            parcelable[0] = new LabeledIntent(vk, "com.vkontakte.android", "VK", 0);
            parcelable[1] = fb;
            parcelable[2] = tw;
            parcelable[3] = wa;
            parcelable[4] = gm;
            parcelable[5] = mail;

            Parcelable p [] = targetedShareIntents.toArray(new Parcelable[] {});
            for (int i = 0; i < p.length; i++) {
                Tools.messageToLog(" >=< PN = " + p[i].toString());
            }
            
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, parcelable);
            chooserIntent.setAction("android.intent.action.MAIN");
            
            ((Activity) context).startActivityForResult(shareIntent, 0);

            // context.startActivity(shareIntent);

        }
    }
}

XML:

cyrcle_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/ProgressBar01"
        android:layout_width="fill_parent"
        android:layout_height="3dp"
        android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"
        android:indeterminateOnly="false"
        android:maxHeight="20dip"
        android:minHeight="20dip"
        android:progressDrawable="@android:drawable/progress_horizontal" >
    </ProgressBar>
        
    <com.postuchat.lookuper.UI.custom.viewflow.CircleFlowIndicator
        android:id="@+id/viewflowindic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:paddingTop="10dp" />

    <com.postuchat.lookuper.UI.custom.viewflow.ViewFlow
        android:id="@+id/viewflow"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <ImageButton
        android:id="@+id/ib1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:paddingTop="10dp" 
        android:src="@drawable/smiley_button"
        android:contentDescription="tests"
        />

</FrameLayout>

web_view1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingTop="20dp" >

    <WebView
        android:id="@+id/wv1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animationCache="false"
        android:soundEffectsEnabled="false" 
        />

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

在您的活动类中覆盖onKeyDown事件并执行您想要的操作。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
       // close dialoge here
     return true;
    }
    return super.onKeyDown(keyCode, event);
}