【问题标题】:Putting data from ArrayList to ListView将数据从 ArrayList 放入 ListView
【发布时间】:2012-11-29 16:59:58
【问题描述】:

我知道,这里有很多关于这个主题的问题,谷歌有很多关于它的教程,但我仍然有一个问题,所以请告诉我我错在哪里;/。还有我的课:

布局类(activity_finish.xml):

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

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="#b5b5b5"
        android:dividerHeight="3dp"
        android:listSelector="@drawable/list_selector" />

</LinearLayout>

行布局(list_row.xml):

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector"
    android:orientation="horizontal"
    android:padding="5dip" >

    <LinearLayout
        android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="5dip"
        android:padding="3dip" >

        <ImageView
            android:id="@+id/list_image"
            android:layout_width="50dip"
            android:layout_height="50dip"
            android:contentDescription="@string/desc"
            android:src="@drawable/icon" />
    </LinearLayout>

    <TextView
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="5dip"
        android:layout_alignBottom="@+id/destinationName"
        android:gravity="right"
        android:text="@string/time"
        android:textColor="#10bcc9"
        android:textSize="23dip" />

    <TextView
        android:id="@+id/destination"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginTop="8dip"
        android:layout_toRightOf="@+id/thumbnail"
        android:text="@string/destination"
        android:textColor="#343434"
        android:textSize="13dip" />

    <TextView
        android:id="@+id/destinationName"
        android:layout_width="153dip"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/destination"
        android:layout_below="@+id/destination"
        android:text="@string/destinationName"
        android:textColor="#040404"
        android:textSize="20dip"
        android:textStyle="bold"
        android:typeface="sans" />

    <TextView
        android:id="@+id/stopName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/thumbnail"
        android:layout_below="@+id/thumbnail"
        android:text="@string/stopName"
        android:layout_marginLeft="3dip" />

    <TextView
        android:id="@+id/stopStreet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/thumbnail"
        android:layout_below="@+id/stopName"
        android:layout_marginTop="3dip"
        android:text="@string/stopStreet" 
        android:layout_marginLeft="3dip"/>

    <TextView
        android:id="@+id/stopOneWay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/time"
        android:layout_below="@+id/stopName"
        android:layout_marginTop="3dip"
        android:text="@string/stopOneWay" 
        android:layout_marginLeft="3dip"/>

    <TextView
        android:id="@+id/lineNumber"
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:layout_alignLeft="@+id/thumbnail"
        android:layout_alignTop="@+id/thumbnail"
        android:gravity="center"
        android:text="@string/lineNumber" 
        android:layout_marginLeft="3dip"
        android:textStyle="bold"
        android:textSize="28dip"
        android:textColor="#DCF0F5"/>

</RelativeLayout>

停止适配器:

public class StopAdapter extends ArrayAdapter<DisplayStop> {

    private List<DisplayStop> stops;
    private LayoutInflater inflater;
    private Context context;

    int layoutResourceId;

    public StopAdapter(Context context, int layoutResourceId, List<DisplayStop> stops) {

        super(context, layoutResourceId, stops);

        this.context = context;
        this.layoutResourceId = layoutResourceId;
        this.stops = stops;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){

        View row = convertView;

        ViewHolder holder = new ViewHolder();

        if(row == null)
        {
            inflater = ((Activity)context).getLayoutInflater();

            row = inflater.inflate(layoutResourceId, parent, false);

            holder.image = (ImageView) row.findViewById(R.id.list_image);
            holder.time = (TextView) row.findViewById(R.id.time);
            holder.destination = (TextView) row.findViewById(R.id.destination);
            holder.destination = (TextView) row.findViewById(R.id.destinationName);
            holder.stopName = (TextView) row.findViewById(R.id.stopName);
            holder.stopStreet = (TextView) row.findViewById(R.id.stopStreet);
            holder.stopOneWay = (TextView) row.findViewById(R.id.stopOneWay);
            holder.lineNumber = (TextView) row.findViewById(R.id.lineNumber);

            row.setTag(holder);

        }

        else{
            holder = (ViewHolder)row.getTag();
        }

        holder.time.setText(stops.get(position).getTime());
        holder.destination.setText("Kierunek:");
        holder.destinationName.setText(stops.get(position).getDestination());
        holder.stopName.setText(stops.get(position).getName());
        holder.stopStreet.setText(stops.get(position).getAddress());
        holder.lineNumber.setText(stops.get(position).getLine());

        if(stops.get(position).getOneWay()) holder.stopOneWay.setText("P. jednokierunkowy");
        else holder.stopOneWay.setText("");

        int line = Integer.parseInt(stops.get(position).getLine());

        if(line >= 50){
            holder.image.setImageResource(R.drawable.icon);
        }
        else{
            holder.image.setImageResource(R.drawable.icon2);
        }

        return row;
    }
}

完成活动:

public class FinishActivity extends Activity {

    private ListView lv;
    private List<DisplayStop> stops;

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

        lv = (ListView) findViewById(R.id.list);

        stops = getStops();//create several objects in list

        if(stops.size() > 0){
            StopAdapter stopAdapter = new StopAdapter(this, R.layout.list_row, stops);
            lv.setAdapter(stopAdapter);     
        }
        else
        {
            Log.d("klop", "0 elementów");
        }


    }

请帮忙,因为我不知道哪里出了问题(我从几个教程制作了几个版本,但仍然没有;/)

【问题讨论】:

  • 在检查整个代码之前,您能否提供您的具体问题,以便我们知道在哪里查找?
  • 问题是当我尝试在目标 TextView 中设置文本时(编译器显示了这一点)。我也有一个 NullEceptionPointer,但我不知道为什么;/

标签: android list listview


【解决方案1】:

尝试不扩展 ArrayAdapter 类,直接声明如下:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, arrayListData);
lv.setAdapter(adapter);

如果您所做的只是从 Array/ArrayList 中放置项目,那么您只需使用 ArrayAdapter 即可

【讨论】:

  • 我试错了,但效果不错,但我的 DisplayStop 对象转换为字符串 - 所以我有几行字符串,例如:DisplayStop@object005f
  • 我不确定 DisplayStop 对象是什么,但看起来“toString()”方法将内存中的地址显示为字符串。 DisplayStop 是您创建的对象吗?为什么不能只使用字符串的 ArrayList?
【解决方案2】:

在activity_finish.xml中ListView的定义中,设置高度为fill_parent

android:layout_height="fill_parent"

列表视图内容在膨胀时没有高度,只有在添加项目时。

另外,也不需要在适配器中保存指向项目的指针

删除这个:

private List<DisplayStop> stops;

然后,当您要访问 ListAdapter 中的项目时,请改用:

DisplayStop item = this.getItem(position);

【讨论】:

    【解决方案3】:

    布局类(activity_finish.xml):

     <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    
    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="#b5b5b5"
        android:dividerHeight="3dp"
        android:listSelector="@drawable/list_selector" />
    
     </LinearLayout>
    

    行布局(list_row.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@drawable/list_selector"
     android:padding="5dip" >
    
        <ImageView
            android:id="@+id/list_image"
            android:layout_width="50dip"
            android:layout_height="50dip"
            android:contentDescription="@string/desc"
            android:src="@drawable/icon" />
    
        <TextView
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="5dip"
        android:layout_alignBottom="@+id/destinationName"
        android:gravity="right"
        android:text="@string/time"
        android:textColor="#10bcc9"
        android:textSize="23dip" />
    
    <TextView
        android:id="@+id/destination"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginTop="8dip"
        android:layout_toRightOf="@+id/thumbnail"
        android:text="@string/destination"
        android:textColor="#343434"
        android:textSize="13dip" />
    
    <TextView
        android:id="@+id/destinationName"
        android:layout_width="153dip"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/destination"
        android:layout_below="@+id/destination"
        android:text="@string/destinationName"
        android:textColor="#040404"
        android:textSize="20dip"
        android:textStyle="bold"
        android:typeface="sans" />
    
    <TextView
        android:id="@+id/stopName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/thumbnail"
        android:layout_below="@+id/thumbnail"
        android:text="@string/stopName"
        android:layout_marginLeft="3dip" />
    
    <TextView
        android:id="@+id/stopStreet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/thumbnail"
        android:layout_below="@+id/stopName"
        android:layout_marginTop="3dip"
        android:text="@string/stopStreet" 
        android:layout_marginLeft="3dip"/>
    
    <TextView
        android:id="@+id/stopOneWay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/time"
        android:layout_below="@+id/stopName"
        android:layout_marginTop="3dip"
        android:text="@string/stopOneWay" 
        android:layout_marginLeft="3dip"/>
    
    <TextView
        android:id="@+id/lineNumber"
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:layout_alignLeft="@+id/thumbnail"
        android:layout_alignTop="@+id/thumbnail"
        android:gravity="center"
        android:text="@string/lineNumber" 
        android:layout_marginLeft="3dip"
        android:textStyle="bold"
        android:textSize="28dip"
        android:textColor="#DCF0F5"/>
    
     </RelativeLayout>
    

    停止适配器:

      public class StopAdapter extends ArrayAdapter<DisplayStop> {
    
        private List<DisplayStop> stops;
    
         public StopAdapter(Context context, int layoutResourceId, List<DisplayStop> stops) {
    
           super(context, layoutResourceId, stops);
           this.stops = stops;
       }
    
       @Override
       public View getView(int position, View convertView, ViewGroup parent){
    
           View row = convertView;
    
           ViewHolder holder = new ViewHolder();
    
           if(row == null)
           {
                LayoutInflater inflater = getLayoutInflater();
    
                row = inflater.inflate(R.layout.list_row, parent, false);
    
                holder.image = (ImageView) row.findViewById(R.id.list_image);
                holder.time = (TextView) row.findViewById(R.id.time);
                holder.destination = (TextView) row.findViewById(R.id.destination);
                holder.destination = (TextView) row.findViewById(R.id.destinationName);
                holder.stopName = (TextView) row.findViewById(R.id.stopName);
                holder.stopStreet = (TextView) row.findViewById(R.id.stopStreet);
                holder.stopOneWay = (TextView) row.findViewById(R.id.stopOneWay);
                holder.lineNumber = (TextView) row.findViewById(R.id.lineNumber);
    
                row.setTag(holder);
    
             }
    
             else{
                holder = (ViewHolder)row.getTag();
             }
    
             holder.time.setText(stops.get(position).getTime());
             holder.destination.setText("Kierunek:");
             holder.destinationName.setText(stops.get(position).getDestination());
             holder.stopName.setText(stops.get(position).getName());
             holder.stopStreet.setText(stops.get(position).getAddress());
             holder.lineNumber.setText(stops.get(position).getLine());
    
             if(stops.get(position).getOneWay()) 
                  holder.stopOneWay.setText("P.jednokierunkowy");
             else 
                  holder.stopOneWay.setText("");
    
             int line = Integer.parseInt(stops.get(position).getLine());
    
             if(line >= 50){
                 holder.image.setImageResource(R.drawable.icon);
             }
             else{
                 holder.image.setImageResource(R.drawable.icon2);
             }
    
             return row;
          }
        }
    

    完成活动:

       public class FinishActivity extends Activity {
    
           private ListView lv;
           private List<DisplayStop> stops;
    
           @Override
           public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_finish);
    
               lv = (ListView) findViewById(R.id.list);
    
               stops = getStops();//create several objects in list
               StopAdapter stopAdapter = new StopAdapter(this, R.layout.list_row, stops);
               lv.setAdapter(stopAdapter);     
           }
           else
            {
                Log.d("klop", "0 elementów");
            }
         }
    

    【讨论】:

    • 我在 LayoutInflater inflater = getLayoutInflater(); 行中有错误我没有这个方法
    • 这样做,LayoutInflater inflater = context.getLayoutInflater();
    【解决方案4】:

    好的,我发现了问题 - 这真的很愚蠢 - 在 StopAdapter 中我犯了错误:

    holder.destination = (TextView) row.findViewById(R.id.destination);
    holder.destination = (TextView) row.findViewById(R.id.destinationName);
    

    因此目标中的文本为空。应该是:

    holder.destination = (TextView) row.findViewById(R.id.destination)
    holder.destinationName = (TextView) row.findViewById(R.id.destinationName);
    

    一切都很好。感谢您的帮助 - 我知道最简单的错误是最难找到的 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 2016-09-08
      相关资源
      最近更新 更多