2011-07-28 92 views
1

所以我試圖把ListView中有兩個TextView的LinearLayout,但我遇到了麻煩,程序不斷崩潰,我嘗試過。 ListView只有一個元素。我的線性佈局的xml如下:ListView中的LinearLayout

<ListView> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:drawablePadding="14dip" 
    android:paddingLeft="15dip" 
    android:paddingRight="15dip"> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge"/> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall"/> 
</LinearLayout> 
</ListView> 

如何在列表視圖中獲取此內容?當我嘗試將它放入列表視圖中時,我在手機上發現錯誤,說對不起!應用程序意外停止。請再試一次。堆棧跟蹤如下。

I/dalvikvm(1692): Debugger thread not active, ignoring DDM send (t=0x41504e4d l=38) 
I/dalvikvm(1692): Debugger thread not active, ignoring DDM send (t=0x41504e4d l=56) 
D/AndroidRuntime(1692): Shutting down VM 
W/dalvikvm(1692): threadid=3: thread exiting with uncaught exception (group=0x4001b170) 
E/AndroidRuntime(1692): Uncaught handler: thread main exiting due to uncaught exception 
E/AndroidRuntime(1692): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.acme.activeisclickable/com.acme.activeisclickable.ActiveIsClickable}: java.lang.RuntimeException: Binary XML file line #14: You must supply a layout_width attribute. 
E/AndroidRuntime(1692):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
E/AndroidRuntime(1692):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
E/AndroidRuntime(1692):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
E/AndroidRuntime(1692):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
E/AndroidRuntime(1692):  at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(1692):  at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(1692):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
E/AndroidRuntime(1692):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(1692):  at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(1692):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
E/AndroidRuntime(1692):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
E/AndroidRuntime(1692):  at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(1692): Caused by: java.lang.RuntimeException: Binary XML file line #14: You must supply a layout_width attribute. 
E/AndroidRuntime(1692):  at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:438) 
E/AndroidRuntime(1692):  at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:3463) 
E/AndroidRuntime(1692):  at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:3543) 
E/AndroidRuntime(1692):  at android.widget.LinearLayout$LayoutParams.<init>(LinearLayout.java:1265) 
E/AndroidRuntime(1692):  at android.widget.LinearLayout.generateLayoutParams(LinearLayout.java:1191) 
E/AndroidRuntime(1692):  at android.widget.LinearLayout.generateLayoutParams(LinearLayout.java:45) 
E/AndroidRuntime(1692):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:620) 
E/AndroidRuntime(1692):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
E/AndroidRuntime(1692):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
E/AndroidRuntime(1692):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
E/AndroidRuntime(1692):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
E/AndroidRuntime(1692):  at android.app.Activity.setContentView(Activity.java:1622) 
E/AndroidRuntime(1692):  at com.acme.activeisclickable.ActiveIsClickable.onCreate(ActiveIsClickable.java:35) 
E/AndroidRuntime(1692):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
E/AndroidRuntime(1692):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
E/AndroidRuntime(1692):  ... 11 more 
I/Process (1275): Sending signal. PID: 1692 SIG: 3 
I/dalvikvm(1692): threadid=7: reacting to signal 3 
I/dalvikvm(1692): Wrote stack trace to '/data/anr/traces.txt' 
+0

什麼是你面對 – Abhi

回答

7

我假設您正在嘗試自定義列表項目。你應該編寫自己的自定義適配器來做到這一點。試試這個tutorial或者你可以檢查出這些視頻:

  1. Presenting your data in a ListView
  2. Transitioning to ListActivity
  3. Beautify your List: Get it working
  4. Beautify your List: Rigth way to do it

披露:我的上述視頻的作者。

+0

只是一個簡單的問題錯誤'鋤頭得到的LinearLayout在listview' ID ? – Gattsu

+0

給它一個'android:id'屬性。 –

1

這個錯誤對我的眼睛來說是痛苦的,破譯說實話。但通常是 你應該可以創建一個具有一個子元素的列表視圖。

我的意思是:

<ListView> 
<LinLayout> 
    <TextView/> 
    <TextView/> 
</LinLayout> 
</ListView> 

這應該工作,因爲ListView控件只允許生一個孩子。但是你的LinearLayout可以有你想要的。如果出現錯誤,可能是您的layoutinflater。

0

你有ListviewListView(大V)在你的佈局文件....

E/AndroidRuntime(1662): Caused by: java.lang.ClassNotFoundException: android.view.Listview

+0

fixed ...同樣的錯誤...更新stacktrace – Matt

+0

'你必須提供一個layout_width屬性'...將layout_width添加到ListView(我假設ListView是在layout.xml文件中的根目錄,如果沒有...提供完整的佈局文件).... **但其他人寫道...你用錯誤的方式使用ListView ... ** – Selvin

0

你必須使用ListView用ListAdatper。

創建一個實現ListAdapter,一旦你需要實現方法的類:

public abstract View getView (int position, View convertView, ViewGroup parent); 

根據該方法將返回爲每個列表元素的視圖,並指定佈局你要的那個。

另外你應該記得重用這些視圖。 有關如何正確使用列表視圖和ListAdapters更多信息:

http://dl.google.com/googleio/2010/android-world-of-listview-android.pdf

或視頻

http://www.google.com/events/io/2010/sessions/world-of-listview-android.html

乾杯, 舊金山。

+0

它與這個異常無關 – Selvin

+0

Selvin,它不需要對異常做任何事情,但是在Android中處理ListView的正確和有效的方式。 –

0

您必須在佈局文件夾中的單獨xml文件中描述您的LinearLayout。然後在運行時使用LayoutInflater類來獲取LinearLayout的一個實例。

inflator.inflate(int resource, ViewGroup root) 

或者,你可以利用Android的適配器可以輕鬆填寫​​清單以適當的項目:

ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); 

HashMap<String, String> h = new HashMap<String, String>(); 
h.put("param", "Nick"); 
h.put("value", "1-2-3"); 
h.put("_id", "1"); 
list.add(h); 

h = new HashMap<String, String>(); 
h.put("param", "Alexander"); 
h.put("value", "4-5-6"); 
h.put("_id", "2"); 
list.add(h); 

SimpleAdapter adapter = new SimpleAdapter(TaxiNewActivity.this, list, R.layout.row, 
       new String[] { "param", "value" }, new int[] { R.id.rowName, R.id.rowPhone }); 

ListView listView = (ListView) findViewById(R.id.layout); 
listView.setAdapter(adapter);