Java 在警报对话框中实现自定义listview
我正在警报对话框中实现自定义列表视图。向自定义适配器添加java.util.ArrayList无法应用于java.util.list时,列表中显示了错误 我创建了一个查询来从表中获取标题列表。我想在警报对话框中显示此列表 怎么了Java 在警报对话框中实现自定义listview,java,android,listview,android-alertdialog,custom-lists,Java,Android,Listview,Android Alertdialog,Custom Lists,我正在警报对话框中实现自定义列表视图。向自定义适配器添加java.util.ArrayList无法应用于java.util.list时,列表中显示了错误 我创建了一个查询来从表中获取标题列表。我想在警报对话框中显示此列表 怎么了 selectTable.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int se
selectTable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int selected = 0;
TimeTableHelper th = new TimeTableHelper(getApplicationContext());
final List<String> tables = new ArrayList<String>(th.getTitle());
AlertDialog.Builder alertDialog = new AlertDialog.Builder(AddEventActivity.this);
LayoutInflater inflater = getLayoutInflater();
View convertView = (View) inflater.inflate(R.layout.alertlistrow, null);
alertDialog.setView(convertView);
ListView lv = (ListView) convertView.findViewById(R.id.listView1);
adapter=new CustomAlertAdapter(AddEventActivity.this, tables);
lv.setAdapter(adapter);
alertDialog.setSingleChoiceItems(adapter,selected,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
ListView lw = ((AlertDialog)dialog).getListView();
Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition());
txtTable.setText(String.valueOf(checkedItem));
dialog.dismiss();
}
});
alertDialog.show();
}
});
selectTable.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
选定的整数=0;
TimeTableHelper th=新的TimeTableHelper(getApplicationContext());
最终列表表=新的ArrayList(th.getTitle());
AlertDialog.Builder AlertDialog=新建AlertDialog.Builder(AddEventActivity.this);
LayoutInflater充气机=getLayoutInflater();
视图转换视图=(视图)充气器。充气(R.layout.alertlistrow,null);
alertDialog.setView(convertView);
ListView lv=(ListView)convertView.findViewById(R.id.listView1);
adapter=新的CustomAlertAdapter(AddEventActivity.this,表);
低压设置适配器(适配器);
alertDialog.setSingleChoiceItems(适配器,选定,
新建DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,int项){
ListView lw=((AlertDialog)对话框).getListView();
对象checkedItem=lw.getAdapter().getItem(lw.getCheckedItemPosition());
setText(String.valueOf(checkedItem));
dialog.dismise();
}
});
alertDialog.show();
}
});
自定义警报适配器
public class CustomAlertAdapter extends BaseAdapter{
Context ctx=null;
ArrayList<String> listarray=null;
private LayoutInflater mInflater=null;
public CustomAlertAdapter(Activity activty,ArrayList<String> list)
{
this.ctx=activty;
mInflater = activty.getLayoutInflater();
this.listarray=list;
}
@Override
public int getCount() {
return listarray.size();
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
final ViewHolder holder;
if (convertView == null ) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.alertlistrow, null);
holder.titlename = (TextView) convertView.findViewById(R.id.textViewTitle);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
String datavalue=listarray.get(position);
holder.titlename.setText(datavalue);
return convertView;
}
private static class ViewHolder {
TextView titlename;
}
}
公共类CustomAlertAdapter扩展了BaseAdapter{
上下文ctx=null;
ArrayList listarray=null;
私有LayoutInflater mInflater=null;
公共CustomAlertAdapter(活动活动,ArrayList列表)
{
这个.ctx=activty;
mInflater=activty.getLayoutFlater();
this.listary=list;
}
@凌驾
public int getCount(){
返回listary.size();
}
@凌驾
公共对象getItem(int arg0){
返回null;
}
@凌驾
公共长getItemId(int arg0){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组arg2){
最终持票人;
if(convertView==null){
holder=新的ViewHolder();
convertView=mInflater.inflate(R.layout.alertlistrow,null);
holder.titlename=(TextView)convertView.findViewById(R.id.textViewTitle);
convertView.setTag(支架);
}
否则{
holder=(ViewHolder)convertView.getTag();
}
String datavalue=listarray.get(位置);
holder.titlename.setText(数据值);
返回视图;
}
私有静态类视图持有者{
文本视图标题名;
}
}
查询:
public ArrayList<String> getTitle() {
ArrayList<String> conList = new ArrayList<String>();
String selectQuery = "SELECT * FROM " + TABLE_TIME_TABLE;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
TimeTable table = new TimeTable();
// table.setId(Integer.parseInt(cursor.getString(0)));
table.setTitle(cursor.getString(1));
conList.add(table.getTitle());
} while (cursor.moveToNext());
}
return conList;
}
public ArrayList getTitle(){
ArrayList conList=新的ArrayList();
String selectQuery=“SELECT*FROM”+表格\时间\表格;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
时间表表=新时间表();
//setId(Integer.parseInt(cursor.getString(0));
table.setTitle(cursor.getString(1));
add(table.getTitle());
}while(cursor.moveToNext());
}
返回列表;
}
谢谢。您的
CustomAlertAdapter
在其构造函数中采用ArrayList
。排队
final List<String> tables = new ArrayList<String>(th.getTitle());
你能做什么
首先将表
声明为ArrayList
,或者像这样调用适配器构造函数:
adapter=new CustomAlertAdapter(AddEventActivity.this, (ArrayList<String>)tables);
adapter=新的CustomAlertAdapter(AddEventActivity.this,(ArrayList)表);
顺便说一句,虽然这对你来说很烦人,但在某些情况下,这种行为是有用的。例如,如果您需要跟踪应用程序中不同AsyncTask
s的实例:所有这些实例都是AsyncTask
的实例,因此您可以将它们放入列表中,并在“onStop()”中通过使用简单的foreach循环运行列表来取消所有任务。
adapter=new CustomAlertAdapter(AddEventActivity.this, (ArrayList<String>)tables);