Android 无法应用Arraylist
我正在尝试获取密码描述文本输入,以填充我的应用程序的数组视图 不幸的是,在我的while部分(cursor.movetoNext())中,我的字符串不能应用于arraylist。我正在尝试确定在updateList方法中更改什么以适应我的密码项 这是我的updatelist方法Android 无法应用Arraylist,android,arraylist,Android,Arraylist,我正在尝试获取密码描述文本输入,以填充我的应用程序的数组视图 不幸的是,在我的while部分(cursor.movetoNext())中,我的字符串不能应用于arraylist。我正在尝试确定在updateList方法中更改什么以适应我的密码项 这是我的updatelist方法 private void updateList(){ ArrayList<String> tasklist = new ArrayList<>();
private void updateList(){
ArrayList<String> tasklist = new ArrayList<>();
SQLiteDatabase db = mHelper.getReadableDatabase();
Cursor cursor = db.query( PasswordContract.PasswordEntry.TABLE, new String[]{PasswordContract.PasswordEntry._ID, PasswordContract.PasswordEntry.COL_PASSWORD, PasswordContract.PasswordEntry.COL_PASS_DESC},
null, null, null, null, null);
while (cursor.moveToNext()){
String password = cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASSWORD));
String description = cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASS_DESC));
tasklist.add(new PasswordItem(password, description));
if (mAdapter == null){
mAdapter = new ArrayAdapter<>(this,
R.layout.item_password,
R.id.password,
R.id.password_description,
tasklist);
mPasswordListView.setAdapter(mAdapter);
}else{
mAdapter.clear();
mAdapter.addAll(String.valueOf(tasklist));
mAdapter.notifyDataSetChanged();
}
cursor.close();
db.close();
public class CustomAdapter extends ArrayAdapter<String>{
private Context mContext;
private List<String> mStringList;
public CustomAdapter(Context context, List<String> mStringList) {
super(context, R.layout.item_password);
this.mContext = context;
this.mStringList = new ArrayList<>();
this.mStringList = mStringList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item_password, parent, false);
TextView your_first_text_view = (TextView) convertView.findViewById(R.id.password);
TextView your_second_text_view = (TextView) convertView.findViewById(R.id.password_description);
your_first_text_view.setText(mStringList.get(position));
your_second_text_view.setText(mStringList.get(position));
return convertView;
}
private void updateList(){
ArrayList tasklist=新建ArrayList();
SQLiteDatabase db=mHelper.getReadableDatabase();
Cursor Cursor=db.query(PasswordContract.PasswordEntry.TABLE,新字符串[]{PasswordContract.PasswordEntry.\u ID,PasswordContract.PasswordEntry.COL\u PASSWORD,PasswordContract.PasswordEntry.COL\u PASS\u DESC},
空,空,空,空,空,空);
while(cursor.moveToNext()){
字符串密码=cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_password));
String description=cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASS_DESC));
添加(新密码项(密码、说明));
if(mAdapter==null){
mAdapter=新阵列适配器(此,
R.layout.item_密码,
R.id.password,
R.id.password\u说明,
任务清单);
mPasswordListView.setAdapter(mAdapter);
}否则{
mAdapter.clear();
mAdapter.addAll(String.valueOf(tasklist));
mAdapter.notifyDataSetChanged();
}
cursor.close();
db.close();
我正在尝试找出如何将customadapter连接到updatelist方法
private void updateList(){
ArrayList<String> tasklist = new ArrayList<>();
SQLiteDatabase db = mHelper.getReadableDatabase();
Cursor cursor = db.query( PasswordContract.PasswordEntry.TABLE, new String[]{PasswordContract.PasswordEntry._ID, PasswordContract.PasswordEntry.COL_PASSWORD, PasswordContract.PasswordEntry.COL_PASS_DESC},
null, null, null, null, null);
while (cursor.moveToNext()){
String password = cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASSWORD));
String description = cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASS_DESC));
tasklist.add(new PasswordItem(password, description));
if (mAdapter == null){
mAdapter = new ArrayAdapter<>(this,
R.layout.item_password,
R.id.password,
R.id.password_description,
tasklist);
mPasswordListView.setAdapter(mAdapter);
}else{
mAdapter.clear();
mAdapter.addAll(String.valueOf(tasklist));
mAdapter.notifyDataSetChanged();
}
cursor.close();
db.close();
public class CustomAdapter extends ArrayAdapter<String>{
private Context mContext;
private List<String> mStringList;
public CustomAdapter(Context context, List<String> mStringList) {
super(context, R.layout.item_password);
this.mContext = context;
this.mStringList = new ArrayList<>();
this.mStringList = mStringList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item_password, parent, false);
TextView your_first_text_view = (TextView) convertView.findViewById(R.id.password);
TextView your_second_text_view = (TextView) convertView.findViewById(R.id.password_description);
your_first_text_view.setText(mStringList.get(position));
your_second_text_view.setText(mStringList.get(position));
return convertView;
}
公共类CustomAdapter扩展了ArrayAdapter{
私有上下文;
私有列表mStringList;
公共CustomAdapter(上下文上下文,列表mStringList){
super(上下文、右布局、项目\密码);
this.mContext=上下文;
this.mStringList=新的ArrayList();
this.mStringList=mStringList;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气器=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.item_密码,父项,false);
TextView您的_first_text_view=(TextView)convertView.findViewById(R.id.password);
TextView您的第二个文本视图=(TextView)convertView.findViewById(R.id.password\u description);
您的第一个文本视图.setText(mStringList.get(position));
您的第二个文本视图.setText(mStringList.get(position));
返回视图;
}
将项目添加到arraylist时,项目的类型必须与定义的项目的类型相同。您使用类型字符串定义了arraylist,但向其添加了PasswordItem对象。
将arraylist类型改为保留PasswordItem:
ArrayList<PasswordItem> tasklist
ArrayList任务列表
将项目添加到arraylist时,项目的类型必须与定义的项目的类型相同。您使用类型字符串定义了arraylist,但向其添加了PasswordItem对象。
将arraylist类型改为保留PasswordItem:
ArrayList<PasswordItem> tasklist
ArrayList任务列表
您使用的是POJO类而不是字符串,因此需要对适配器和列表类型进行必要的更改
用这个
ArrayList<PasswordItem> tasklist = new ArrayList<>();
在你的适配器里
public class CustomAdapter extends ArrayAdapter<PasswordItem>{
// ^^^^^^^
private Context mContext;
private List<PasswordItem> mStringList;
// ^^^^^^^
public CustomAdapter(Context context, int resource , List<PasswordItem> mStringList) {
super(context, resource , mStringList);
this.mContext = context;
//this.mStringList = new ArrayList<>(); not required
this.mStringList = mStringList;
}
public updateList(List<PasswordItem> mStringList){
this.mStringList = mStringList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item_password, parent, false);
TextView your_first_text_view = (TextView) convertView.findViewById(R.id.password);
TextView your_second_text_view = (TextView) convertView.findViewById(R.id.password_description);
your_first_text_view.setText(mStringList.get(position).password);
// use your getter or field names of POJO class
your_second_text_view.setText(mStringList.get(position).description);
return convertView;
}
您使用的是POJO类not string,因此需要对适配器和列表类型进行必要的更改 用这个
ArrayList<PasswordItem> tasklist = new ArrayList<>();
在你的适配器里
public class CustomAdapter extends ArrayAdapter<PasswordItem>{
// ^^^^^^^
private Context mContext;
private List<PasswordItem> mStringList;
// ^^^^^^^
public CustomAdapter(Context context, int resource , List<PasswordItem> mStringList) {
super(context, resource , mStringList);
this.mContext = context;
//this.mStringList = new ArrayList<>(); not required
this.mStringList = mStringList;
}
public updateList(List<PasswordItem> mStringList){
this.mStringList = mStringList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item_password, parent, false);
TextView your_first_text_view = (TextView) convertView.findViewById(R.id.password);
TextView your_second_text_view = (TextView) convertView.findViewById(R.id.password_description);
your_first_text_view.setText(mStringList.get(position).password);
// use your getter or field names of POJO class
your_second_text_view.setText(mStringList.get(position).description);
return convertView;
}
Pavneet,差不多了。我已经在updatelist方法中添加了if和else语句。我已经更新了我的帖子来显示它们。arrayadapter告诉我们不能推断参数。你知道是什么原因吗?它仍然说arrayadapter无法应用。你已经回答了我的第一个问题。这就足够了。错误:(120,23)错误:无法推断ArrayAdapterError:task:app:CompiledBugJavaWithJavaC.>的执行失败;编译失败;有关详细信息,请参阅编译器错误输出。Pavneet,就在那里。我已在updatelist方法上添加了if和else语句。我已更新帖子以显示它们。arrayadapter告诉我们无法推断argum你知道这是什么原因吗?它仍然说arrayadapter无法应用。你已经回答了我的第一个问题。这就满足了我的疑问。:)错误:(120,23)错误:无法推断ArrayAdapterError的类型参数:任务:app:CompiledBugJavaWithJavaC“”的执行失败>编译失败;有关详细信息,请参阅编译器错误输出。