0

このトピックについてはたくさんの質問があり、グーグルにはそれについてのチュートリアルがたくさんありますが、それでも問題があるので、どこが間違っているのか教えてください;/。私のクラスがあります:

レイアウトクラス(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>

StopAdapter:

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;
    }
}

FinishActivity:

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");
        }


    }

何が間違っているのかわからないので、助けてください(私はいくつかのチュートリアルからいくつかのバージョンを作成しましたが、それでも何もありません; /)

4

4 に答える 4

1

ArrayAdapter クラスを拡張せずに実行してみて、次のように直接宣言します。

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

Array/ArrayList から項目を配置するだけの場合は、ArrayAdapter を使用する以外に何もする必要はありません。

于 2012-11-29T17:18:46.027 に答える
0

レイアウト クラス (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");
        }
     }
于 2012-11-29T17:30:23.310 に答える
0

activity_finish.xml の ListView の定義で、高さを fill_parent に設定します。

android:layout_height="fill_parent"

リスト ビューのコンテンツは、アイテムが追加されたときにのみ、膨張したときに高さを持ちません。

また、アダプター内のアイテムへのポインターを保持する必要はありません

これを削除します:

private List<DisplayStop> stops;

次に、ListAdapter の項目にアクセスする場合は、代わりにこれを使用します。

DisplayStop item = this.getItem(position);
于 2012-11-29T17:12:34.457 に答える
0

わかりました、問題を見つけました-それは本当にSTUPIDでした-StopAdapterで次の行で間違いを犯しました:

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

そのため、宛先のテキストは null でした。そのはず:

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

そして、すべてが良いです。助けてくれてありがとう - 私は最も単純なエラーが最も見つけにくいことを知っています:)

于 2012-11-29T18:33:53.790 に答える