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