0

データベースのリストビュー レコードに表示する必要がある Android アプリケーションを実行しています。ただし、ドローアブルを呼び出して配列に割り当てた写真。SimpleCursorAdapter を使用して ImageView に写真を表示するにはどうすればよいですか?

これまでに試したことは次のとおりです。

    static final int[] imgs = {
        R.drawable.dinaretreat, // 0
        R.drawable.cobterrace, // 1
        R.drawable.ventassostreet, // 2
        R.drawable.summerhillblvddrouin, // 3
        R.drawable.todmanstreetdrouin, // 4
        R.drawable.aqueductroad // 5
};

    private DBHelper dbHelper;
SimpleCursorAdapter dataAdapter;
Cursor cursor;

Button back, filter;
TextView highest, lowest, location;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewhouseandland);

    initControls();

    displayRecords();
}

private void displayRecords() {
    // TODO displayRecords
    // TODO CheckDBConnection
    checkDatabaseConnection();

    // TODO 
    cursor = dbHelper.getAllHouses();


    // The desired columns to be bound
    String[] columns = new String[] {
      DBHelper.KEY_HOUSE,
      DBHelper.KEY_PRICE
    };

    // the XML defined views which the data will be bound to
    int[] to = new int[] {
      R.id.image,
      R.id.text1,
      R.id.text2
    };

    // create the adapter using the cursor pointing to the desired data
    //as well as the layout information
    dataAdapter = new SimpleCursorAdapter(
      this, R.layout.listrow,
      cursor,
      columns,
      to,
      0);

    lv.setAdapter(dataAdapter);

}

リストビューに画像を表示する方法に苦労しています。何か案は?よろしくお願いします。ありがとう。

4

3 に答える 3

1

必要なのは、から拡張するクラス (-> CustomAdapter) ですBaseAdapter。そこでは、listItem ごとに独自のレイアウトを定義できます。

したがって、行項目のカスタム レイアウトを作成します (これはImageView. このレイアウトは、 のgetView()メソッドでカスタマイズする必要がありますBaseAdapter。ただし、この記事を読んで、listView の「スムーズなスクロール」を確保してください。

CustomAdapter は次のようになります。

public class MyCustomAdapter extends BaseAdapter{

    // MEMBER
    private int[] mImgs;

    public MyCustomAdapter(Activity context, int[] imgs){
        mImgs = imgs;
        mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return mImgs.length;
    }

    @Override
    public Object getItem(int position) {
        return mImgs[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    // --- detail settings of single views
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // check if your layout is null
        if(convertView == null){
            convertView = createNewView();              
        }

        // get the ViewHolder of your view
        ViewHolder holder = (ViewHolder) convertView.getTag();

        // --- set data to listItem
        holder.imageView.setImageDrawable(mImgs[position])

        return convertView;
    }


    // new View
    private View createNewView() {
        View convertView = null;
        int layout = 0;

        ViewHolder holder = new ViewHolder();

        layout = R.layout.customlayout;
        convertView = mInflater.inflate(layout, null);
        holder.imageView = (ImageView) convertView.findViewById(R.id.customlayout_imageview);

        convertView.setTag(holder);
        return convertView;
    }

    //ViewHolder
    public static class ViewHolder{
        public ImageView imageView;
    }

}
于 2013-10-29T06:47:28.900 に答える
0

DBHelper.KEY_IMAGE_TYPE のような列を追加し、「from」のサイズを「to」と同じサイズに修正します。ViewBinder を使用したサンプル コードは次のようになります。

    // The desired columns to be bound
    String[] columns = new String[] { DBHelper.KEY_IMAGE_TYPE, DBHelper.KEY_HOUSE,
            DBHelper.KEY_PRICE };

    // the XML defined views which the data will be bound to
    int[] to = new int[] {  
            R.id.image,
            R.id.text1,
            R.id.text2};

    SimpleCursorAdapter dataAdapter = new SimpleCursorAdapter(this,
            R.layout.listrow, cursor, columns, to, 0);
    dataAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(View view, Cursor cursor,
                int columnIndex) {
            switch (view.getId()) {
            case R.id.image:
                int imageType = cursor.getInt(columnIndex);
                int imageToBeShown=0;
                switch (imageType) {
                case TYPE_ONE:
                    imageToBeShown=imgs[0];
                    break;
                case TYPE_TWO:
                    imageToBeShown=imgs[1];
                    break;
                case TYPE_THREE:
                    imageToBeShown=imgs[2];
                    break;
                case TYPE_FOUR:
                    imageToBeShown=imgs[3];
                    break;
                case TYPE_FIVE:
                    imageToBeShown=imgs[4];
                    break;
                case TYPE_SIX:
                    imageToBeShown=imgs[5];
                    break;
                }
                ((ImageView)view).setImageResource(imageToBeShown);
                return true;
            }
            return false;
        }
    });
于 2013-10-29T07:09:16.173 に答える