LinearLayout в ListView - PullRequest
       12

LinearLayout в ListView

1 голос
/ 28 июля 2011

Итак, я пытаюсь поместить LinearLayout, который имеет два TextViews внутри ListView, но у меня возникают проблемы, и программа продолжает падать с тем, что я пробовал.ListView будет иметь только один элемент.XML для моего линейного макета выглядит следующим образом:

<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'

Ответы [ 5 ]

6 голосов
/ 28 июля 2011

Я предполагаю, что вы пытаетесь настроить элементы списка.Вы должны написать свой собственный адаптер для этого.Попробуйте этот учебник , или вы можете посмотреть эти видео:

  1. Представление ваших данных в ListView
  2. Переход к ListActivity
  3. Украсьте свой список: получите его работу
  4. Украсьте свой список: Прямой способ сделать это

РАСКРЫТИЕ ИНФОРМАЦИИ: Я автор вышеупомянутых видео.

1 голос
/ 28 июля 2011

Эта ошибка болезненна для моих глаз, чтобы быть честным. но обычно у вас должна быть возможность создать просмотр списка с одним дочерним элементом.

что я говорю:

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

это должно работать, так как ListView допускает только один дочерний элемент. Но ваш LinearLayout может иметь столько, сколько вы хотите. Если есть ошибка, это может быть ваша раскладка.

0 голосов
/ 28 июля 2011

Вы должны описать свой LinearLayout в отдельном XML-файле в папке макета. Затем во время выполнения используйте класс 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);
0 голосов
/ 28 июля 2011

Вы должны использовать ListView с ListAdatper.

Создайте класс, который реализует ListAdapter, один из методов, которые вам нужно реализовать:

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

С этим методом вывернет представление для каждого из элементов вашего списка и определит макет, который вы хотите.

Также вы должны помнить, чтобы использовать эти представления повторно.Для получения дополнительной информации о том, как правильно использовать ListViews и 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

Cheers, Francisco.

0 голосов
/ 28 июля 2011

у вас есть Listview не ListView (большое V) в вашем файле макета ....

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

...