如何在一个活动中显示两个视图(Android)?

4
假设我打开了一个Webview:
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    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(覆盖它...但仍然允许webview运行)。我可以切换视图的开关。

2个回答

5
您可以使用FrameLayout,这样两个视图将会重叠在一起。然后您可以使用View.setVisibility(..)方法来切换它们的可见性。

[编辑:添加代码]

这是我的布局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_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView
    android:id="@+id/list_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />
    <WebView
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

</FrameLayout>

现在,我创建了一个Activity,在其View层次结构中将同时拥有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);
    }

}

注意: 代码可能不完整,但我希望它能向您传达我的观点。


ListActivity怎么办?现在,我的类继承自Activity(为了我的WebView)。但我不能同时继承两者。 - TIMEX
ListActivity继承自Activity。所以你的类可以继承ListActivity,同时在其中嵌入一个WebView。你只需要在布局文件中添加一个ListView,其中android:name="@android:id/list"(如果你选择继承ListActivity)。此外,你也不需要继承ListActivity,你可以让你的类继承Activity,并在布局文件中同时拥有ListView和WebView。 - Samuh
我会看看能否为您找到一些代码……这样事情就更清晰了。 - Samuh

1

是的,如果您想以编程方式切换视图(View.VISIBLE)并关闭(VIEW.GONE),setVisibility可能会帮助您。

关于您对Samuhs答案的评论:在Java中,您没有多重继承。但是ListActivity继承自Activity,因此ListActivity与Activity几乎相同(且更多)。

此外,您不必使用ListActivity来显示ListView,它只是提供了一些方便的处理基于列表的活动的功能,因为它们非常常见。

您到底遇到了什么错误?


+1 鼓励回答原帖提出的问题。 - Samuh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接