【问题标题】:ListView values are all shown false (in Android)ListView 值都显示为 false(在 Android 中)
【发布时间】:2014-09-04 15:59:21
【问题描述】:

我在 rowlayout.xml 中有三个 textview。但是,当我运行我的应用程序时,除 rating 之外的所有值都显示为 false。

rowlayout.xml:

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

    <ImageView
        android:id="@+id/icon"
        android:layout_width="44dp"
        android:layout_height="44dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="4dp"
        android:src="@drawable/ic_launcher" >
        </ImageView>

    <TextView
        android:id="@+id/rating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="10dp"        
        android:layout_marginTop="4dp"
        android:text="@+id/rating" />

    <TextView
        android:id="@+id/distance"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_toLeftOf="@id/rating"    
        android:layout_marginLeft="4dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="4dp"
        android:text="@+id/distance" />

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/icon"
        android:text="@+id/name"
        android:textSize="40sp" />

</RelativeLayout>

和 MainActivity.java 类:

package com.SahilSiddesh.far4;    
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends ListActivity {
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
    "Linux", "OS/2" };
    String[] distance = new String[] {"1","2","3","4","5","6","7","8","9","10"};
    String[] rating = new String[] {"2","2.5", "5", "4.6", "0","1","3","4","5","1"};

    // use your custom layout
    ArrayAdapter<String> adapterValues = new ArrayAdapter<String>(this,
    R.layout.rowlayout, R.id.name, values);
    setListAdapter(adapterValues);

    ArrayAdapter<String> adapterDistance = new ArrayAdapter<String>(this,
        R.layout.rowlayout, R.id.distance, distance);
    setListAdapter(adapterDistance);

    ArrayAdapter<String> adapterRating = new ArrayAdapter<String>(this,
            R.layout.rowlayout, R.id.rating, rating);
    setListAdapter(adapterRating);
      }

      @Override
      protected void onListItemClick(ListView l, View v, int position, long id) {
        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
      }
    } 

【问题讨论】:

    标签: java android xml android-layout listview


    【解决方案1】:

    您为一个列表使用了 3 个适配器,这是错误的。 一个列表应该只匹配 1 个适配器。

    之所以只有评分有文字是因为你有

       setListAdapter(adapterRating);          
    

    作为最后一个 setListAdapter。

    您应该构建一个带有 3 个数组的自定义适配器,扩展 rowlayout.xml,并根据您的情况手动设置所有文本。 您还可以创建一个具有 3 个字段的新类,并为该类创建一个数组,然后将该数组传递给自定义适配器而不是 3 个数组。

    Custom adapter

    【讨论】:

      【解决方案2】:

      你的实现完全错误,你在列表视图上设置了三个不同的适配器,所以最后一个会覆盖前一个。

      对于数组使用 Java POJO 类。

      class Platform{
           String os;
           String distance;
           String rating;
      }
      

      然后创建Platform 类的列表或数组,并将其传递给您的自定义适配器。

      您必须使用自定义列表适配器,请通过this link

      【讨论】:

      • 好的,谢谢。另外请您告诉我如何动态设置图像(如上面的 ic_launcher 中)。我的意思是我正在考虑为相应的评级实施图像。例如:如果评分是 4 分(满分 5 分),那么我将获得 4 星的图像。我要求提供相关代码或示例,而不是如何创建图像(在 Photoshop 中)。
      • 您可以在您的适配器getView方法中设置图片,请通过链接,如何使用自定义适配器,然后您也可以使用图片
      【解决方案3】:

      您需要做的是创建一个自定义适配器。使用基本适配器是错误的,请查看此PDF 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2014-04-07
        • 2017-08-15
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多