4

私は自分に書き込もうとしBaseAdapterていますGrivViewが、

public View getView(int position, View convertView, ViewGroup parent) { ... }

次のposition要素をレンダリングしている間は次のとおりです。

visible elements
---------------
|  1   2   3  |
|  4   5   6  | <--- screen
|  7   8   9  |
---------------

nonvisible elements
|  1   2   3  | <-- below visible area
|  4   5   6  |

実在する場所:

visible elements
---------------
|  1   2   3  |
|  4   5   6  | 
|  7   8   9  |
---------------

nonvisible elements
| 10  11  12  |
| 13  14  15  | 

私はそれが正しい振る舞いであることを知っています(それは目に見える要素だけを数えます)が、リスト上のアイテムの実際の位置を取得する方法は?または、どのレイアウトを返す必要があるかを知る方法はありますか?

編集:しかし、返された数は、画面上でさえ、私が示したよりもはるかにランダムです。

4

1 に答える 1

1

GoogleDocumentatnionのショーBaseAdapterとまったく同じように使用すると問題なく機能します。

私の問題は:

  • ViewHolderを使用しない

  • またはviewHolderでIDを保持しようとしています

私はViewHolder次のように使用する必要があります:

public View getView(int position, View convertView, ViewGroup parent) {
    // create holder
    ViewHolder holder; // check if layout exists

    if (convertView == null) { // if it's not recycled, initialize some

        LayoutInflater inflater = LayoutInflater.from(mContext);
        convertView = (LinearLayout) inflater.inflate(R.layout.card_prev,
                null);

        // Create layout elements
        ImageView image = (ImageView) convertView
                .findViewById(R.id.imageViewThumbnail);

        TextView desc = (TextView) convertView
                .findViewById(R.id.textViewDescription);


        // Place layout elements in holder
        holder = new ViewHolder();
        holder.id = position;
        holder.preview = image;
        holder.text = desc;

        convertView.setTag(holder);
    } else {
        // Get existing holder
        holder = (ViewHolder) convertView.getTag();
    }

    // Update layout here using layout elements from holder
    String imageName = "image_" + (position + 1);
    final int imageId = mContext.getResources().getIdentifier(imageName,
            "drawable", "com.myapp");

    holder.text.setText("" + (position+1));

    holder.preview.setImageResource(imageId);

    holder.preview.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent fullScreenIntent = new Intent(v.getContext(),
                    FullScreenImage.class);
            fullScreenIntent.putExtra("imageRes", imageId);

            MainMenuActivity.currentShownActivity
                    .startActivity(fullScreenIntent);

        }
    });

    return convertView;
}
于 2011-11-29T22:35:04.573 に答える