如何在同一个 Activity onCreate() 中执行 WebView 和 ListView?

Posted

技术标签:

【中文标题】如何在同一个 Activity onCreate() 中执行 WebView 和 ListView?【英文标题】:How to do a WebView AND ListView in the same Activity onCreate()? 【发布时间】:2011-01-15 04:50:54 【问题描述】:
public class hello extends Activity, ListActivity 
    WebView main_webv;  
    ListView main_listv;
    public static final int REFRESHLIST_ID = Menu.FIRST;

    private Handler mHandler = new Handler();
    private static final String SPLASH = "http://";
    private static final String LIST_NAMES = "http://";

    private class HelloWebViewClient extends WebViewClient 
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
            view.loadUrl(url);
            return true;
        
    

    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.main);
        main_webv = (WebView) findViewById(R.id.mainwebview);
        main_webv.setWebViewClient(new HelloWebViewClient());
        main_webv.getSettings().setjavascriptEnabled(true);
        main_webv.getSettings().setSupportZoom(false);
        main_webv.addJavascriptInterface(new HelloJavascriptInterface(),"hello");
        main_webv.setWebChromeClient(new HelloWebChromeClient());
        main_webv.loadUrl(SPLASH);  
        main_webv.setVisibility( 4 );

        setContentView(R.layout.main_list);         
        main_listv = (ListView) findViewById(R.id.mainlistview);    

    

如您所见,我首先创建了一个 webview。然后,我希望它立即消失。然后,我希望 Listview 出现。但问题是,如果我不做ListActivity,我就不能做Listview...但是我不能做Activity...

【问题讨论】:

【参考方案1】:

您当然可以在没有ListActivity 的情况下使用ListView。您还可以使用 WebViewListActivity

【讨论】:

而Java不允许多重继承“所以公共类imhello扩展了Activity,ListActivity”不正确【参考方案2】:

您可以查看我在您的另一个(可能相关)线程中发布的代码:here。 我将复制相同的代码: 这是我的布局 XML(weblister.xml):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_
    >
    <ListView
    android:id="@+id/list_view"
    android:layout_
    android:layout_
    />
    <WebView
    android:id="@+id/webview"
    android:layout_
    android:layout_
    />

</FrameLayout>

现在,我创建了一个 Activity,它的视图层次结构中同时包含 ListView 和 WebView,但其中只有一个是可见的:

public class WebAct extends Activity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.weblister);

            //setup listview
        ListView listView = (ListView) findViewById(R.id.list_view);
        listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                new String[]"One","Two")

        );
            // setup web view
        WebView webView = (WebView) findViewById(R.id.webview);

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(false);

        webView.loadUrl("http://www.google.com");

            // set visibility    
        listView.setVisibility(View.INVISIBLE);
        webView.setVisibility(View.VISIBLE);
    


【讨论】:

【参考方案3】:

//main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
>
<RelativeLayout android:id="@+id/lister"
             android:layout_
             android:layout_
             android:layout_alignParentTop="true">
<ListView
android:id="@+id/list_view"
android:layout_
android:layout_
/>
</RelativeLayout>

<RelativeLayout android:id="@+id/webviewer"
         android:layout_
         android:layout_
         android:layout_below="@+id/lister">    
<WebView
android:id="@+id/webview"
android:layout_
android:layout_
/>
</RelativeLayout>

//java文件

package list.View;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class ListViewActivity extends Activity 
@Override
protected void onCreate(Bundle savedInstanceState) 
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

        //setup listview
    ListView listView = (ListView) findViewById(R.id.list_view);
    listView.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,
            new String[]"One","Two")

    );
        // setup web view
    WebView webView = (WebView) findViewById(R.id.webview);

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setSupportZoom(false);

    //webview.loadUrl("www.google.com");

    webView.loadDataWithBaseURL("file:///android_asset/", "<img src=\"banner5.png\" height=\"98%\" width=\"100%\"/>", "text/html", "utf-8", null);




【讨论】:

以上是关于如何在同一个 Activity onCreate() 中执行 WebView 和 ListView?的主要内容,如果未能解决你的问题,请参考以下文章

关于Fragment.onCreate()中引用Activity.onCreate()创建的对象时的一个异常

关于Fragment.onCreate()中引用Activity.onCreate()创建的对象时的一个异常

为啥说安卓activity的onCreate()方法 只调用一次

怎样实现android 返回到上一个Activity并重新执行一次onCreate方法

Android - 将用户发送到 Activity 的 GCM 推送通知不会导致 onCreate 调用

从 MainActivity 中的 onCreate() 启动另一个 Activity?