1

私はApple2 つのフィールドを持つクラスを持ってcolourおりrotationAppleViewそのメソッドでリンゴをその色と回転で描画しますonDraw(これは私の実際のコードを簡略化したものです)。AppleView には、再割り当て可能なデフォルトのリンゴ (たとえば、赤で 0 度回転したもの) があります。2 つのクラスの疑似コードを次に示します。

public class Apple {
    int colour;
    int rotation;
}

public class AppleView extends View {
    Apple apple = getDefaultApple();

    @Override
    protected void onDraw(Canvas canvas) {
        drawApple(canvas, apple);
    }
}

りんごの ArrayList から AppleViews の ListView を作成したいと思います。2 つのレイアウトを作成します: ListView ( R.layout.list_view):

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:id="@android:id/list">
</ListView>

AppleViewおよび( )だけのリスト項目R.layout.list_item:

<?xml version="1.0" encoding="utf-8"?>
<com.mypackage.AppleView xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/apple">
</com.mypackage.AppleView>

最後にListActivity、カスタム アダプター クラスを拡張して使用し、リスト項目を描画します。

public class MyListActivity extends ListActivity {

    ArrayList<Apple> apples = new ArrayList<Apple>();

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

        // Add 100 random apples to the list for demonstration.
        for (int i = 0; i < 100; i++) {
            apples.add(getRandomApple());
        }

        getListView().setAdapter(new MyAdapter(this, R.layout.list_item, apples));
    }

    class MyAdapter extends ArrayAdapter<Apple> {
        public MyAdapter(Context context, int resourceID, ArrayList<Apple> items) {
            super(context, resourceID, items);
        }

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

            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.list_item, parent, false);
            }

            // Change this AppleView's apple to the new ArrayList element at this position.
            AppleView appleView = (AppleView) convertView.findViewById(R.id.apple);
            appleView.apple = apples.get(position);

            return convertView;
        }
    }
}

すべての適切なメソッドが呼び出されていますが (つまり、各リンゴの getView と onDraw)、ListView は表示されません。

ここに画像の説明を入力

上記のコードのどこにエラーがありますか?

4

2 に答える 2

0
I have made some change with your arrayadapter.
 class MyAdapter extends ArrayAdapter<ArrayList<Apple>> {
        private ArrayList<Apple> apple = null;
        public MyAdapter(Context context, int resourceID, ArrayList<Apple> items) {
            super(context, resourceID, items);
            this.apple = items;
        }


  @Override
        public int getCount() {
    //Check with this size if it is greater than zero,then list is visible
            return apple.size();
        }


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

            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.list_item, parent, false);
            }

            // Change this AppleView's apple to the new ArrayList element at this position.
            AppleView appleView = (AppleView) convertView.findViewById(R.id.apple);
            appleView.apple = apple.get(position);

            return convertView;
        }
    }
于 2013-09-27T19:32:55.623 に答える