0

私はこれを数週間扱ってきました。関連する他のすべての質問を既に確認しましたが、役に立ちません。私はカスタムListViewを設定しようとしていますが、一生それを機能させることはできません。誰かが私の間違いに気付くことを期待して、関連するすべての情報を投稿します。

アクティビティのレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context=".MainActivity"
                android:background="#000000">

    <ListView
    android:id="@+id/deviceListView"
    android:layout_width="400px"
    android:layout_height="fill_parent"
    android:textColor="#ffffff"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"/>
</LinearLayout>

カスタム行レイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal"
              android:background="#000000">
    <TextView android:id="@+id/textId"
              android:textSize="50sp"
              android:text="ID"
              android:textColor="#FFFFFF"
              android:textStyle="bold"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"/>
    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
            android:orientation="vertical">
    <TextView android:id="@+id/textTimestamp"
              android:textSize="16sp"
              android:text="Timestamp"
              android:textColor="#FFFFFF"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>
              android:layout_height="wrap_content"/>

    <TextView android:id="@+id/textCoordinates"
              android:textSize="16sp"
              android:text="Coordinates"
              android:textColor="#FFFFFF"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>

    <TextView android:id="@+id/textDistance"
              android:textSize="16sp"
              android:text="Distance"
              android:textColor="#FFFFFF"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>
    </LinearLayout>
</LinearLayout>

アダプターモデル:

public class DeviceList {
    public static ArrayList<Device> list;

    public static void loadModel(int quantity) {
        ArrayList<Device> listTmp = new ArrayList<Device>();
        for (int i = 0; i < quantity; i++) {
            listTmp.add(new Device(System.currentTimeMillis(), i, new float[]{0, 0}, System.currentTimeMillis() / (i + 1)));
        }
        list = listTmp;
    }

    public static Device GetById(int id){
        Device tmp = null;
        for(Device device : list){
            if (device.getID() == id){
                tmp = device;
            }
        }
        return tmp;
    }
}

アダプタ:

public class DeviceArrayAdapter extends ArrayAdapter<Device> {
    private Context context;
    private int rowResourceId;
    private String[] ids;

    public DeviceArrayAdapter(Context context, int rowResourceId, String[] devices) {
        super(context, rowResourceId);
        this.context = context;
        this.ids = devices;
        this.rowResourceId = rowResourceId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.device_row, parent, false);
        TextView idTextview = (TextView) rowView.findViewById(R.id.textId);
        TextView timeStampTextview = (TextView) rowView.findViewById(R.id.textTimestamp);
        TextView coordinatesTextview = (TextView) rowView.findViewById(R.id.textCoordinates);
        TextView distanceTextview = (TextView) rowView.findViewById(R.id.textDistance);
        int id = Integer.parseInt(ids[position]);
        timeStampTextview.setText(Long.toString(DeviceList.GetById(id).getTimestamp()));
        idTextview.setText(DeviceList.GetById(id).getID());
        coordinatesTextview.setText(DeviceList.GetById(id).getCoordinates()[0] + "," + DeviceList.GetById(id).getCoordinates()[1]);
        distanceTextview.setText(DeviceList.GetById(id).getDistance() + "");
        return rowView;
    }
}

そして最後にアクティビティの onCreate メソッド:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        setContentView(R.layout.activity_main);

//        ArrayList<Device> list = createDummyDeviceList(5);
        DeviceList.loadModel(5);
        String[] ids = new String[DeviceList.list.size()];
        for (int i= 0; i < ids.length; i++){

            ids[i] = Integer.toString(i+1);
        }
        ListView listView = (ListView) findViewById(R.id.deviceListView);
        DeviceArrayAdapter adapter = new DeviceArrayAdapter(this, R.layout.device_row, ids);
        listView.setAdapter(adapter);
}

注:このように投稿して申し訳ありませんが、私は必死です。私はすでに最後の行までデバッグしており、すべてがロードされており、例外はありません。しかし、それだけでは人口が増えません。

[編集]

選択した回答とともに、異なる番号の配列と ID もありました。私が生成した ID は、0 ではなく 1 から始まりました。

4

2 に答える 2

0

ArrayAdapter のソースを確認http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/widget/ArrayAdapter.java#ArrayAdapter.getCount%28 %29

あなたの場合、メソッド getCount() をオーバーライドする必要があります。

于 2013-08-20T14:58:11.290 に答える