【问题标题】:Android ListView creates the views but doesn't display themAndroid ListView 创建视图但不显示它们
【发布时间】:2012-12-11 01:11:39
【问题描述】:

我在使用 Android 上的 ListView 时遇到问题。我有一个带有 EditText 视图和一个按钮的 Activity。这个想法是用户应该在 EditText 字段中输入一些信息,触摸 Search 按钮,该按钮从 Web 服务中检索列表,该列表显示在 EditText 和 Button 下方的同一活动中。一切都很好,我从互联网上获得了数据,但没有显示项目。我正在使用 notifyDataSetChanged()。几个小时后没有成功,我决定尝试手动放置一些项目,结果又没有显示任何内容,因此我认为我在尝试设置列表视图和适配器时做错了。所以这里是代码..

活动activity_search.xml的xml

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:layout_margin="5dp">

    <EditText
        android:id="@+id/edit_search"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:inputType="text"
        android:hint="Enter info"
        android:ems="10" >
        <requestFocus />
    </EditText>

    <Button 
        android:id="@+id/button_search"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@android:drawable/ic_menu_search"
        android:contentDescription="Search"
        android:ems="10" />
</LinearLayout>

<ListView
    android:id="@+id/listview_items" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawSelectorOnTop="false" />

项目row.xml的XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
android:orientation="vertical"
android:layout_margin="5dp">

<TextView
    android:id="@+id/row_code"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/Common_TextContent" 
    android:textAppearance="@android:style/TextAppearance.Holo.Medium" />

<TextView
    android:id="@+id/row_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:text="@string/Common_TextContent"
    android:textAppearance="@android:style/TextAppearance.Holo.Small" /></LinearLayout>

自定义适配器:

public class ItemsListAdapter extends ArrayAdapter<ItemsList> {


private int[] colors = new int[] { 0x30ffffff, 0x30808080 };

public AssetListAdapter(Context context,
        List<ItemsList> itemsList) {
    super(context, 0, itemsList);

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null);
    }

    convertView.setBackgroundColor(colors[position % colors.length]);

    TextView code = (TextView) convertView.findViewById(R.id.row_code);
    code.setText(getItem(position).getCode());

    TextView name = (TextView) convertView.findViewById(R.id.row_name);
    name.setText(getItem(position).getName());

    return convertView;
}

以及Activity上的onCreate方法

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

    _listView = (ListView) findViewById(R.id.listview_items);
    _listItems = new ArrayList<ItemsList>();

    _listItems.add(new ItemsList ("cosa1", "cosa1", "cosa1", "cosa1"));
    _listItems.add(new ItemsList ("cosa2", "cosa2", "cosa2", "cosa2"));
    _listItems.add(new ItemsList ("cosa3", "cosa3", "cosa3", "cosa3"));

    _adapter =  new ItemsListAdapter(this, _listItems);
    _listView.setAdapter(_adapter);

}

ItemsList 只是一个包含 4 个字符串的对象,并实现了所有的 getter。 当我在 Adapter 的 getView 方法中调试时,会创建视图 (convertView) 并且它具有正确的信息。只是没有在屏幕上显示那些。我究竟做错了什么?

谢谢...

【问题讨论】:

    标签: android android-listview android-arrayadapter


    【解决方案1】:

    您的第二个LinearLayout 的高度为match_parent。请改用wrap_content

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:layout_margin="5dp">
    

    【讨论】:

    • 谢谢伙计..不敢相信虽然,为什么hierarchyviewer没有告诉我:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    相关资源
    最近更新 更多