java - 如何使用 ListView 在同一 WebView Activity 中启动不同的 URL

标签 java android listview browser webview

这里是菜鸟。我正在学习创建一个简单的 Android 网络浏览器。我面临的问题是我有一个带有不同网站列表的 ListView 和一个带有 WebViewActivity 。但是,我只能从此 Activity 启动一个 URL。我希望在单击 ListView 中的另一个项目时将 URL 替换为其他网站。

我不想为每个链接创建一个新的Activity。这是我的代码。

MainActivity.java

package firstapp.listviewtutorial;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    String url = getIntent().getStringExtra("url");
    final String TAG = this.getClass().getName();
    ArrayAdapter<String> adapter;
    ListView listView;
    String[] website_names = {"Google Search","Wikipedia Search", "Youtube Search","World News",
            "Facebook", "Twitter", "Amazon Shopping","About Us","Exit"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView)findViewById(R.id.menu_item);

        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, website_names);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                switch (position){

                    case 0:
                        Intent gs = new Intent(MainActivity.this, WebViewActivity.class);
                        startActivity(gs);
                        break;
                    case 1:
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                    case 5:
                        break;
                    case 6:
                        break;
                    case 7:
                        Intent about = new Intent(MainActivity.this, AboutDev.class);
                        startActivity(about);
                        break;
                    case 8:
                        System.exit(0);
                        break;
                }


            }
        });
    }

    boolean twice=false;
    @Override
    public void onBackPressed() {

        if(twice == true){

            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            finish();
            System.exit(0);

        }
        twice = true;
        Log.d(TAG, "Twice: " +twice);

        // super.onBackPressed();
        Toast.makeText(MainActivity.this, "Press Again to Exit", Toast.LENGTH_SHORT).show();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                twice = false;
                Log.d(TAG, "Twice: " +twice);
            }
        },3000);
    }
}

WebViewActivity.java

package firstapp.listviewtutorial;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import static firstapp.listviewtutorial.R.id.webView;

public class WebViewActivity extends AppCompatActivity {

    WebView wb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_google_search);

        wb = (WebView) findViewById(webView);
        wb.setWebViewClient(new WebViewClient());
        WebSettings webSettings = wb.getSettings();
        webSettings.setJavaScriptEnabled(true);
        wb.loadUrl("http://www.google.com");
    }


    @Override
    public void onBackPressed() {
        if (wb.canGoBack()) {
            wb.goBack();
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.menu_main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()){

            case R.id.item_option1:
                wb.reload();
                break;
            case R.id.item_option2:
                Intent home = new Intent(WebViewActivity.this, MainActivity.class);
                startActivity(home);
                break;
            case R.id.item_option3:
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
                sendIntent.setType("text/plain");
                startActivity(sendIntent);
                break;
            case R.id.item_option4:
Intent about = new Intent(WebViewActivity.this, AboutDev.class);
                startActivity(about);
                break;
            case R.id.item_option5:
                System.exit(0);
                break;

        }

        return super.onOptionsItemSelected(item);
    }
}

我还需要添加其他内容吗?谢谢大家。

最佳答案

在这部分你要做

case 0:
    Intent gs = new Intent(MainActivity.this, WebViewActivity.class);

    //ADD THIS LINE
    gs.putExtra("URL", "<whatever_url_for_case_0>");

    startActivity(gs);

对所有列表项和网址执行相同的操作。

在WebViewActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_google_search);

    wb = (WebView) findViewById(webView);
    wb.setWebViewClient(new WebViewClient());
    WebSettings webSettings = wb.getSettings();
    webSettings.setJavaScriptEnabled(true);

    //Retrieve the url that you put into your intent
    String url = getIntent().getStringExtra("URL");
    wb.loadUrl(url);
}

关于java - 如何使用 ListView 在同一 WebView Activity 中启动不同的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027319/

相关文章:

c# - C# WinForms 中 ListView 第一列中的图像

ios - React-Native ListView正确返回空行

java - 如何定位具有使用 Thymeleaf 组成的 id 的输入字段的值

Android 解析 json 的文本编码是 big5

用于 AES 解密的 Java 字节

java - 我有两个水平 ScrollView 。如何一次显示一个并通过单击按钮在它们之间切换?

android - Facebook SDK 中很少有内存泄漏

c# - SQL查询在转换日期后更改列名

java - Dropwizard 0.8 和 Jetty 在资源上失败返回 404

java - 在 Observable 中返回从 Observables 收集的结果的最佳实践是什么?