同一活动中的webview和listview

时间:2012-09-19 13:43:56

标签: android listview webview

我正在尝试在同一个活动中制作webview和listview。 这是我的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:color/white" >

<com.markupartist.android.widget.ActionBar
    android:id="@+id/actionbar"
    style="@style/ActionBar" />

<WebView
    android:id="@+id/webView1"
    android:layout_width="match_parent"
    android:layout_height="210dp" />

<ListView
    android:id="@+id/listtest"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

<TextView 
    android:id="@+id/tv_test2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:textSize="16sp"/>

这是我的行布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" >

<com.markupartist.android.widget.ActionBar
    android:id="@+id/actionbar"
    style="@style/ActionBar" />

<TextView
    android:id="@+id/tv_test"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:textSize="16sp" >
</TextView>

这是我的活动:

public class Tab_Bike_Information_Activity extends Activity {
WebView mWebView;
TextView tv;
private ListView mainListView;
private ArrayAdapter<String> listAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tessss);

    final ActionBar actionBar = (ActionBar) findViewById(R.id.actionbar);
    actionBar.setTitle(getString(R.string.app_name));

    int index = getIntent().getIntExtra("text", 0);

    mWebView = (WebView) findViewById(R.id.webView1);

    String temp = "<html><body>" + "<p align=\"justify\">"
            + getString(R.string.xc_info + index) + "</p> "
            + "</body></html>";
    mWebView.loadData(temp, "text/html", "utf-8");


    mainListView = (ListView) findViewById(android.R.id.list );  

    // Create and populate a List of planet names.  
    String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",  
                                      "Jupiter", "Saturn", "Uranus", "Neptune"};    
    ArrayList<String> planetList = new ArrayList<String>();  
    planetList.addAll( Arrays.asList(planets) );  

    // Create ArrayAdapter using the planet list.  
    listAdapter = new ArrayAdapter<String>(this, R.layout.tessss_row, planetList);  

    // Add more planets. If you passed a String[] instead of a List<String>   
    // into the ArrayAdapter constructor, you must not add more items.   
    // Otherwise an exception will occur.  
    listAdapter.add( "Ceres" );  
    listAdapter.add( "Pluto" );  
    listAdapter.add( "Haumea" );  
    listAdapter.add( "Makemake" );  
    listAdapter.add( "Eris" );  


    tv = (TextView) findViewById(R.id.tv_test);

}

这里是logcat:

09-19 20:04:04.659: E/AndroidRuntime(13951): FATAL EXCEPTION: main
09-19 20:04:04.659: E/AndroidRuntime(13951): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wilis.hellotabwidget/com.wilis.hellotabwidget.Tab_Bike_Information_Activity}: java.lang.NullPointerException
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.os.Looper.loop(Looper.java:130)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.app.ActivityThread.main(ActivityThread.java:3687)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at java.lang.reflect.Method.invokeNative(Native Method)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at java.lang.reflect.Method.invoke(Method.java:507)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at dalvik.system.NativeStart.main(Native Method)
09-19 20:04:04.659: E/AndroidRuntime(13951): Caused by: java.lang.NullPointerException
09-19 20:04:04.659: E/AndroidRuntime(13951):    at com.wilis.hellotabwidget.Tab_Bike_Information_Activity.onCreate(Tab_Bike_Information_Activity.java:75)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-19 20:04:04.659: E/AndroidRuntime(13951):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
09-19 20:04:04.659: E/AndroidRuntime(13951):    ... 11 more

任何人都可以帮忙吗?感谢

3 个答案:

答案 0 :(得分:2)

我看到了一些事情,但我可能错了,我只是看代码而没有测试它。

类不应该使用ListActivity而不是Activity?

接下来就是,在你的班上你有:

mainListView = (ListView) findViewById(android.R.id.list); 

但在您的XML中,listView具有不同的Id:

android:id="@+id/listtest"

我认为这应该是

android:id="@+id/android:list"

另一个是TextView的id是错误的。您正在寻找 tv_test 而不是 tv_test2

希望这有帮助。

答案 1 :(得分:0)

tv必须引用你的TextView:findViewById()!

答案 2 :(得分:0)

我看到两个问题:首先是列表视图的ID。 改变

mainListView = (ListView) findViewById(android.R.id.list );

mainListView = (ListView) findViewById(R.id.listtest );

也许您需要删除android.R。*的导入以使eclipse识别出更改。

其次,在你的适配器中,现在指定了TextView 变化

listAdapter = new ArrayAdapter<String>(this, R.layout.tessss_row, planetList);

listAdapter = new ArrayAdapter<String>(this, R.layout.tessss_row, R.id.tv_test, planetList);

让ArrayAdapter知道应该在哪个textView中写入planetList的内容。