Android的微调:自定义显示适配器 [英] Android Spinner: Custom Adapter Display

查看:183
本文介绍了Android的微调:自定义显示适配器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是SimpleCursorAdapter我的微调,因为我想创建一个包含多行自定义DROPDOWNLIST和我的数据库填充它。我已经很好地完成了这一任务,但在我的布局活动,微调显示所选行,我想它有一个单独的布局,仅显示选定行的第一行。我怎样才能做到这一点?

 字符串字段[] = {姓名,罗维朋比,万有引力};
    nameAdapter =新GrainSpinnerAdapter(这一点,R.layout.grain_spinner_row,数据领域,新的INT [] {R.id.GrainSpinnerName,R.id.GrainSpinnerLovibond,R.id.GrainSpinnerGravity});
    nameSpinner.setAdapter(nameAdapter);

下面是我的SimpleCursorAdapter code:

 公共类GrainSpinnerAdapter扩展SimpleCursorAdapter {    私人语境myContext;    公共GrainSpinnerAdapter(上下文的背景下,INT布局,光标C,的String []从,INT []到){
        超(背景下,布局,C,从,到);
        myContext =背景;
    }    @覆盖
    公共无效bindView(查看视图,上下文的背景下,光标光标){
        super.bindView(查看,背景,光标);        INT名称列= cursor.getColumnIndex(名称);
        字符串的getName = cursor.getString(名称列);
        TextView的名字=(TextView中)view.findViewById(R.id.GrainSpinnerName);
        name.setText(的getName);    }    @覆盖
    公共查看NewView的(上下文的背景下,光标光标的ViewGroup父){
        super.newView(背景下,游标,父母);
        查看查看= View.inflate(背景下,R.layout.grain_spinner,NULL);
        返回视图。
    }    @覆盖
    公共查看newDropDownView(上下文的背景下,光标光标的ViewGroup父){
        super.newDropDownView(背景下,游标,父母);        查看查看= View.inflate(背景下,R.layout.grain_spinner_row,NULL);
        INT名称列= cursor.getColumnIndex(名称);
        字符串的getName = cursor.getString(名称列);
        TextView的名字=(TextView中)view.findViewById(R.id.GrainSpinnerName);
        name.setText(的getName);        INT loviColumn = cursor.getColumnIndex(罗维朋比);
        字符串getLovi = cursor.getString(loviColumn);
        TextView的lovi =(TextView中)view.findViewById(R.id.GrainSpinnerLovibond);
        lovi.setText(getLovi);        INT gravityColumn = cursor.getColumnIndex(重力);
        字符串getGravity = cursor.getString(gravityColumn);
        TextView的比重=(TextView中)view.findViewById(R.id.GrainSpinnerGravity);
        gravity.setText(getGravity);        返回视图。
    }


解决方案

我觉得你问是的 getDropDownView()方法: //developer.android.com/reference/android/widget/BaseAdapter.html相对=nofollow> BaseAdapter 类。

在您的NewView的方法做,你做了什么,并为单行显示的布局。

然后实现newDropDownView吹大另一个布局,提供了多条线路。
下拉视图用于创建在弹出菜单中行时,当用户选择下拉菜单中提供。

I am using a SimpleCursorAdapter on my spinner because I want to create a custom dropDownList that contains multiple rows and populate it from my database. I have accomplished this task quite nicely, but on my layout activity, the spinner shows the selected rows and I would like it to have a separate layout so it shows only the first line of the selected row. How can I accomplish this?

String fields[] = {"name", "lovibond", "gravity"};
    nameAdapter = new GrainSpinnerAdapter(this, R.layout.grain_spinner_row, data, fields, new int[] { R.id.GrainSpinnerName, R.id.GrainSpinnerLovibond, R.id.GrainSpinnerGravity });
    nameSpinner.setAdapter(nameAdapter);

Here is my SimpleCursorAdapter code:

public class GrainSpinnerAdapter extends SimpleCursorAdapter {

    private Context myContext;

    public GrainSpinnerAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
        myContext = context;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);

        int nameColumn = cursor.getColumnIndex("name");
        String getName = cursor.getString(nameColumn);
        TextView name = (TextView)view.findViewById(R.id.GrainSpinnerName);
        name.setText(getName);

    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        super.newView(context, cursor, parent);
        View view = View.inflate(context, R.layout.grain_spinner, null);
        return view;
    }

    @Override
    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {
        super.newDropDownView(context, cursor, parent);

        View view = View.inflate(context, R.layout.grain_spinner_row, null);
        int nameColumn = cursor.getColumnIndex("name");
        String getName = cursor.getString(nameColumn);
        TextView name = (TextView)view.findViewById(R.id.GrainSpinnerName);
        name.setText(getName);

        int loviColumn = cursor.getColumnIndex("lovibond");
        String getLovi = cursor.getString(loviColumn);
        TextView lovi = (TextView)view.findViewById(R.id.GrainSpinnerLovibond);
        lovi.setText(getLovi);

        int gravityColumn = cursor.getColumnIndex("gravity");
        String getGravity = cursor.getString(gravityColumn);
        TextView gravity = (TextView)view.findViewById(R.id.GrainSpinnerGravity);
        gravity.setText(getGravity);

        return view;
    }

解决方案

I think what you are asking is the getDropDownView() method of BaseAdapter class.

In your newView method do what you've done and provide a layout for single row displays.

Then implement newDropDownView to inflate another layout that provides for multiple lines. The drop down views are used to create rows in the popup menu that is provided when a user selects the dropdown.

这篇关于Android的微调:自定义显示适配器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆