строка просмотра списка Android занимает всю высоту - PullRequest
2 голосов
/ 19 января 2012

У меня есть относительное представление представления для использования со списком. По какой-то причине, хотя я установил layout_height на wrap_content, макет занимает все пространство, которое он может. В результате каждая строка в списке становится такой же высокой, как и экран!

Я не уверен, что не так с представлением. Раньше работал просто отлично.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/cloudbkg" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/pay" />

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/imageView1"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />
</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>

</RelativeLayout>

Вот функция getView.

public View getView(final int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                try {
                    final JSONObject holder = getItem(position);
                    convertView = inflateView(R.layout.dumb);
                    convertView.setOnClickListener(new OnClickListener() {
                        public void onClick(View v) {
                            try {
                                Intent i = new Intent(context, Pending.class);
                                i.putExtra("id", holder.getString("_id"));
                                context.startActivity(i);
                            } catch(Throwable e){
                                e.printStackTrace();
                            }
                        }
                    });
                    convertView.setOnLongClickListener(new OnLongClickListener(){
                        public boolean onLongClick(View v){
                            try {
                                final CharSequence[] items = {"Pay", "Delete"};
                                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                                builder.setTitle(holder.getString("service"));
                                builder.setItems(items, new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int item) {

                                    }
                                }).create().show();
                            } catch(Throwable e){
                                e.printStackTrace();
                            }
                            return true;
                        }
                    });
                    TextView t = (TextView)convertView.findViewById(R.id.amount);
                    t.setText(holder.getString("currency") + holder.getString("amount"));
                    setImg((ImageView)convertView.findViewById(R.id.pic), holder.getJSONObject("to").getString("pic"));
                    t = (TextView) convertView.findViewById(R.id.time);
                    t.setText(DateUtils.getRelativeTimeSpanString(holder.getLong("time")*1000, System.currentTimeMillis(), 0, DateUtils.FORMAT_ABBREV_ALL));
                    t = (TextView) convertView.findViewById(R.id.service);
                    t.setText(holder.getString("service")); // url, co-ords, or shop

                } catch(Throwable e) {
                    e.printStackTrace();
                }
            }
            return convertView;
        }

Ответы [ 3 ]

1 голос
/ 20 января 2012

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

0 голосов
/ 19 января 2012

Если вы знаете, какова будет высота строки (например, 60dp), вместо wrap_content укажите layout_height="60dp" в корне RelativeLayout.Затем вы можете использовать layout_centerVertical для правильного выравнивания видов.

Если это неприемлемо, попробуйте задать разные цвета фона для разных представлений в качестве способа отладки и посмотреть, какое представление отвечает за захват всего пространства.

0 голосов
/ 19 января 2012

Не уверен, что это проблема, но когда вы создаете пользовательский макет ListActivity, вам необходимо установить макет экрана списка, а также макет отдельной строки.Убедитесь, что файл ресурса, который вы передаете setContentView(), содержит объект ListView с идентификатором android:id/list и что вы передаете макет строки (как вы опубликовали выше) соответствующему адаптеру.

...