Android: 自定义适配器未对列表视图进行排序
Android: Custom Adapter not sorting list view
我有一个可以正确添加字符串的列表视图,但是在我对列表单元格进行排序并调用通知后,适配器也不会进行排序。这似乎是合理的,因为我没有链接列表单元格和适配器。那么该怎么做呢?
ListView listView = (ListView) findViewById(R.id.viewListViewUsuarios);
List<TextView> listCell = new ArrayList<TextView>();
//(get all TextView and put them on listCell)...
private void reorderArray() {
Collections.sort(listCell, new Comparator<TextView>() {
@Override
public int compare(TextView t1, TextView t2) {
return t1.getText().toString().compareToIgnoreCase(t2.getText().toString());
}
});
CustomAdapter myCustomAdapter = new CustomAdapter();
listView.setAdapter(myCustomAdapter);
}
}
这是我的自定义适配器 class
class CustomAdapter extends BaseAdapter {
@Override
public int getCount() {
return listCell.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
view = getLayoutInflater().inflate(R.layout.usuarios_aguardando_cell, null);
TextView item = (TextView) view.findViewById(R.id.txtUsuariosAguardandoText);
Button btnInv = (Button) view.findViewById(R.id.btnUsuariosAguardandoViewInvisible);
TextView cell = listCell.get(i);
item.setText(cell.getText());
return view;
}
}
PS:我搜索过其他类似的链接,但 none 有效。
Textview
内容在您获取时可能会发生变化。
请获取所有TextView
的内容并将它们放在listCell
。
List<CharSequence> listCell = new ArrayList<CharSequence>();
您应该有一个 ArrayList<DataObject>
来支持您的适配器,而不是对文本视图进行排序。 DataObject
s 可以是自定义对象或字符串,如果这就是您所需要的。这是一个例子
public class CustomAdapter extends BaseAdapter {
private List<DataObject> dataObjects;
public CustomAdapter(List<DataObject> dataObjects) {
this.dataObjects = dataObjects;
}
@Override
public int getCount() {
return dataObjects.size();
}
@Override
public Object getItem(int i) {
return dataObjects.get(i);
}
@Override
public long getItemId(int i) {
return dataObjects.get(i).getId();
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
DataObject dataObject = dataObjects.get(i);
view = getLayoutInflater().inflate(R.layout.usuarios_aguardando_cell, null);
TextView item = (TextView) view.findViewById(R.id.txtUsuariosAguardandoText);
Button btnInv = (Button) view.findViewById(R.id.btnUsuariosAguardandoViewInvisible);
item.setText(dataObject.getText);
return view;
}
}
如您所见,我们在适配器中显示了一个对象列表
我有一个可以正确添加字符串的列表视图,但是在我对列表单元格进行排序并调用通知后,适配器也不会进行排序。这似乎是合理的,因为我没有链接列表单元格和适配器。那么该怎么做呢?
ListView listView = (ListView) findViewById(R.id.viewListViewUsuarios);
List<TextView> listCell = new ArrayList<TextView>();
//(get all TextView and put them on listCell)...
private void reorderArray() {
Collections.sort(listCell, new Comparator<TextView>() {
@Override
public int compare(TextView t1, TextView t2) {
return t1.getText().toString().compareToIgnoreCase(t2.getText().toString());
}
});
CustomAdapter myCustomAdapter = new CustomAdapter();
listView.setAdapter(myCustomAdapter);
}
}
这是我的自定义适配器 class
class CustomAdapter extends BaseAdapter {
@Override
public int getCount() {
return listCell.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
view = getLayoutInflater().inflate(R.layout.usuarios_aguardando_cell, null);
TextView item = (TextView) view.findViewById(R.id.txtUsuariosAguardandoText);
Button btnInv = (Button) view.findViewById(R.id.btnUsuariosAguardandoViewInvisible);
TextView cell = listCell.get(i);
item.setText(cell.getText());
return view;
}
}
PS:我搜索过其他类似的链接,但 none 有效。
Textview
内容在您获取时可能会发生变化。
请获取所有TextView
的内容并将它们放在listCell
。
List<CharSequence> listCell = new ArrayList<CharSequence>();
您应该有一个 ArrayList<DataObject>
来支持您的适配器,而不是对文本视图进行排序。 DataObject
s 可以是自定义对象或字符串,如果这就是您所需要的。这是一个例子
public class CustomAdapter extends BaseAdapter {
private List<DataObject> dataObjects;
public CustomAdapter(List<DataObject> dataObjects) {
this.dataObjects = dataObjects;
}
@Override
public int getCount() {
return dataObjects.size();
}
@Override
public Object getItem(int i) {
return dataObjects.get(i);
}
@Override
public long getItemId(int i) {
return dataObjects.get(i).getId();
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
DataObject dataObject = dataObjects.get(i);
view = getLayoutInflater().inflate(R.layout.usuarios_aguardando_cell, null);
TextView item = (TextView) view.findViewById(R.id.txtUsuariosAguardandoText);
Button btnInv = (Button) view.findViewById(R.id.btnUsuariosAguardandoViewInvisible);
item.setText(dataObject.getText);
return view;
}
}
如您所见,我们在适配器中显示了一个对象列表