Android:如何使用数据库中的文本信息制作按钮列表

Android:如何使用数据库中的文本信息制作按钮列表,android,android-layout,android-sqlite,Android,Android Layout,Android Sqlite,我正在做一个简单的“任务”应用程序。每项任务都包含一份任务清单。我想用显示每个任务标题的按钮显示可用任务列表 我在数据库中有每个任务及其规格。下面是一些教程,比如他们使用ArrayAdapter来显示列表,但在布局中需要“textview资源id”。我不知道如何将每个任务的标题(我从数据库中检索)传递到布局并将其放在按钮上,因为我从不使用文本视图 为了清楚起见,下面是我从de DB检索数据的活动代码 public class InProgress extends ListActivity {

我正在做一个简单的“任务”应用程序。每项任务都包含一份任务清单。我想用显示每个任务标题的按钮显示可用任务列表

我在数据库中有每个任务及其规格。下面是一些教程,比如他们使用ArrayAdapter来显示列表,但在布局中需要“textview资源id”。我不知道如何将每个任务的标题(我从数据库中检索)传递到布局并将其放在按钮上,因为我从不使用文本视图

为了清楚起见,下面是我从de DB检索数据的活动代码

public class InProgress extends ListActivity {

    private questspecdao datasource;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        datasource = new questspecdao(this);
        datasource.open();

        List<questspec> values = datasource.getAllQuests();

        ArrayAdapter<questspec> adapter = new ArrayAdapter<questspec>(this,
                R.layout.questrow, values);
        setListAdapter(adapter);
    }

    @Override
    protected void onResume() {
        datasource.open();
        super.onResume();
    }

    @Override
    protected void onPause() {
        datasource.close();
        super.onPause();
    }

}
进程中的公共类扩展了ListActivity{ 私有questspecdao数据源; @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); 数据源=新的questspecdao(此); datasource.open(); 列表值=datasource.getAllQuests(); ArrayAdapter=新的ArrayAdapter(此, R.layout.questrow,值); setListAdapter(适配器); } @凌驾 受保护的void onResume(){ datasource.open(); super.onResume(); } @凌驾 受保护的void onPause(){ datasource.close(); super.onPause(); } }
提前谢谢

您对ArrayAdapter进行了错误的改编

根据Android官方的ArrayAdapter,“默认情况下,该类期望提供的资源id引用单个TextView”

这意味着它只支持TextView,因此您必须像以下那样实现它:

    ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array /** Your data String[] goes here. */);

    /** Sets adapter to your declared ListView. */
    youtListView.setAdapter(arrayAdapter);
如果需要自定义列表项,则必须创建自己的适配器:

public class MyArrayAdapter extends ArrayAdapter<String> {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            /** Inflate a xml layout to the View. */
        View itemView = inflater.inflate(R.layout.rowlayout, parent, false);

            /**Declare all of your items at the previous defined rowlayout xml file . */
        TextView textView = (TextView) itemView .findViewById(R.id.textView);
        ImageView imageView = (ImageView) itemView .findViewById(R.id.icon);

            /** Set some values to the declared item views. */
        textView.setText(values[position]);
        if (values[position].contains("XXXXXXX")) {
            imageView.setImageResource(R.drawable.x);
        } else {
            imageView.setImageResource(R.drawable.y);
        }

        return itemView;
    }
} 
公共类MyArrayAdapter扩展了ArrayAdapter{
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
/**将xml布局膨胀到视图中*/
视图项视图=充气机。充气(R.layout.rowlayout,父项,false);
/**在先前定义的rowlayout xml文件中声明所有项目*/
TextView TextView=(TextView)itemView.findViewById(R.id.TextView);
ImageView=(ImageView)itemView.findViewById(R.id.icon);
/**为声明的项视图设置一些值*/
setText(值[位置]);
如果(值[位置]。包含(“XXXXXXX”)){
setImageResource(R.drawable.x);
}否则{
setImageResource(R.drawable.y);
}
返回项目视图;
}
} 

如果这对您有帮助,请告诉我:)

告诉我们您在哪里被卡住了。一段代码可能会有所帮助。我已经输入了活动的代码,但正如我前面所说的,
ArrayAdapter
不起作用,因为我没有在
R.layout.questrow
版面中使用文本视图。我正在使用按钮。@Nixton,请查看下面我的答案。谢谢,我不知道如何自定义我自己的阵列适配器。让我检查一下,看看是否有效!