Android 如何构建滚动时加载更多数据的listView
我有一张我的班级作业单的列表。此ArrayList用于填充ListView,但是,当我的SELECT返回非常大的结果时,我在填充ListView时遇到问题。好奇的人会根据我的需要加载信息。搜索时,我找到了一些使用setOnScrollListener事件的方法,但不清楚信息是如何上传到listView的。 我的疑问是:Android 如何构建滚动时加载更多数据的listView,android,listview,arraylist,Android,Listview,Arraylist,我有一张我的班级作业单的列表。此ArrayList用于填充ListView,但是,当我的SELECT返回非常大的结果时,我在填充ListView时遇到问题。好奇的人会根据我的需要加载信息。搜索时,我找到了一些使用setOnScrollListener事件的方法,但不清楚信息是如何上传到listView的。 我的疑问是: 如何加载信息?必须根据需要从服务器请求它们,或者我们填充整个ArrayList,然后再进行控制 在哪里可以找到满足我需要的简单教程 要填充我的listView,我使用以下代码
- 如何加载信息?必须根据需要从服务器请求它们,或者我们填充整个ArrayList,然后再进行控制
- 在哪里可以找到满足我需要的简单教程
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pending_wos);
new LoadPendingWorkOrders().execute();
}
private class LoadPendingWorkOrders extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
progress = ProgressDialog.show(PendingWorkOrders.this,
getResources().getString(R.string.Wait), getResources()
.getString(R.string.LoadingPendingWOs));
}
@Override
protected Void doInBackground(Void... params) {
try {
worker = Application.getInstance().getUser();
WorkOrderQueries woQ = WorkOrderQueriesFactory
.createWorkOrderQueriesFactory();
pendingWorkOrders = woQ
.selectPendingWorkOrders(asset, fromDate, workType,
workRequestType, workOrderState);
for (WorkOrder w : pendingWorkOrders) {
if (w.getDataCompare() >= 0) {
w.setFlag(getResources().getDrawable(
R.drawable.green));
} else {
w.setFlag(getResources()
.getDrawable(R.drawable.red));
}
}
} catch (QueryException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
} catch (ParseException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
setListAdapter(new PendingWOArrayAdapter(getApplicationContext(),
R.layout.pending_wos_list, pendingWorkOrders));
ListView listView = getListView();
listView.setTextFilterEnabled(true);
if (progress != null)
progress.dismiss();
}
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.pending_wos);
新建LoadPendingWorkOrders().execute();
}
私有类LoadPendingWorkOrders扩展异步任务{
@凌驾
受保护的void onPreExecute(){
progress=ProgressDialog.show(PendingWorkOrders.this,
getResources().getString(R.string.Wait),getResources()
.getString(R.string.LoadingPendingWOs));
}
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
worker=Application.getInstance().getUser();
WorkOrderQueries woQ=WorkOrderQueriesFactory
.createWorkOrderQueriesFactory();
待处理工单=woQ
.选择PendingWorkOrders(资产、起始日期、工作类型、,
workRequestType、workOrderState);
用于(工作订单w:挂起工作订单){
如果(w.getDataCompare()>=0){
w、 setFlag(getResources().getDrawable(
R.可拉深(绿色);
}否则{
w、 setFlag(getResources()
.getDrawable(R.drawable.red));
}
}
}捕获(查询异常e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}捕获(解析异常){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
setListAdapter(新的PendingWOArrayAdapter(getApplicationContext()),
R.layout.pending_wos_list,pendingWorkOrders);
ListView ListView=getListView();
setTextFilterEnabled(true);
如果(进度!=null)
进步。解散();
}
}
这是我的适配器类:
public class PendingWOArrayAdapter extends ArrayAdapter<WorkOrder> {
private List<WorkOrder> workOrders = new ArrayList<WorkOrder>();
public PendingWOArrayAdapter(Context context, int textViewResourceId,
List<WorkOrder> objects) {
super(context, textViewResourceId, objects);
this.workOrders = objects;
}
static class ViewHolder {
protected ImageView flagIcon;
protected TextView workOrderName;
protected TextView workOrderState;
protected TextView priority;
protected TextView plannedDate;
protected TextView asset;
protected CheckBox chkDownloadWorkOrder;
}
public int getCount() {
return this.workOrders.size();
}
public WorkOrder getItem(int index) {
return this.workOrders.get(index);
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
WorkOrder pendingWO = getItem(position);
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.pending_wos_list, parent, false);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.flagIcon = (ImageView) row.findViewById(R.id.flagIcon);
viewHolder.workOrderName = (TextView) row
.findViewById(R.id.TxtWorkOrder);
viewHolder.workOrderState = (TextView) row
.findViewById(R.id.TxtWorkOrderState);
viewHolder.priority = (TextView) row.findViewById(R.id.TxtPriority);
viewHolder.plannedDate = (TextView) row
.findViewById(R.id.TxtPlannedDate);
viewHolder.asset = (TextView) row.findViewById(R.id.TxtAsset);
viewHolder.chkDownloadWorkOrder = (CheckBox) row
.findViewById(R.id.ChkDownloadWorkOrder);
viewHolder.chkDownloadWorkOrder
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
WorkOrder workOrder = (WorkOrder) viewHolder.chkDownloadWorkOrder
.getTag();
workOrder.setSelected(buttonView.isChecked());
}
});
row.setTag(viewHolder);
viewHolder.chkDownloadWorkOrder.setTag(pendingWO);
} else {
((ViewHolder) row.getTag()).chkDownloadWorkOrder.setTag(workOrders
.get(position));
}
ViewHolder holder = (ViewHolder) row.getTag();
holder.workOrderName.setText(pendingWO.toString());
holder.workOrderState.setText("Estado OS: " + pendingWO.getWorkOrderState() + " - "
+ pendingWO.getWorkOrderStateName());
holder.priority.setText("Prioridade: " + pendingWO.getPriority());
holder.plannedDate.setText("Data Prevista: "
+ pendingWO.getPlannedDate());
holder.asset.setText("Ativo: " + pendingWO.getAsset() + " - "
+ pendingWO.getAssetName());
holder.flagIcon.setImageDrawable(pendingWO.getFlag());
holder.chkDownloadWorkOrder.setChecked(pendingWO.isSelected());
if (pendingWO.isChkVisible()) {
holder.chkDownloadWorkOrder.setVisibility(View.VISIBLE);
} else {
holder.chkDownloadWorkOrder.setVisibility(View.GONE);
}
return row;
}
公共类PendingWOArrayAdapter扩展了ArrayAdapter{
private List workOrders=new ArrayList();
公共PendingWOArrayAdapter(上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
this.workOrders=对象;
}
静态类视窗夹{
受保护的图像视图标志图标;
受保护的文本视图workOrderName;
受保护的文本视图工作顺序状态;
受保护的文本视图优先级;
受保护的文本视图计划日期;
受保护的文本视图资产;
受保护复选框chkDownloadWorkOrder;
}
public int getCount(){
返回此.workOrders.size();
}
公共工单getItem(整数索引){
返回此.workOrders.get(索引);
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
待处理工单WO=getItem(位置);
if(行==null){
LayoutInflater充气器=(LayoutInflater)this.getContext()
.getSystemService(上下文布局\充气机\服务);
行=充气机。充气(R.layout.pending\u wos\u list,父级,false);
最终ViewHolder ViewHolder=新的ViewHolder();
viewHolder.flagIcon=(ImageView)row.findViewById(R.id.flagIcon);
viewHolder.workOrderName=(文本视图)行
.findViewById(R.id.TxtWorkOrder);
viewHolder.workOrderState=(文本视图)行
.findViewById(R.id.TxtWorkOrderState);
viewHolder.priority=(TextView)row.findViewById(R.id.TxtPriority);
viewHolder.plannedDate=(文本视图)行
.findViewById(R.id.TxtPlannedDate);
viewHolder.asset=(TextView)row.findViewById(R.id.TxtAsset);
viewHolder.chkDownloadWorkOrder=(复选框)行
.findViewById(R.id.ChkDownloadWorkOrder);
viewHolder.chkDownloadWorkOrder
.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
WorkOrder WorkOrder=(WorkOrder)viewHolder.chkDownloadWorkOrder
.getTag();
workOrder.setSelected(buttonView.isChecked());
}
});
row.setTag(viewHolder);
viewHolder.chkDownloadWorkOrder.setTag(pendingWO);
}否则{
((ViewHolder)row.getTag()).chkDownloadWorkOrder.setTag(workOrders
.获得(职位);
}
ViewHolder=(ViewHolder)row.getTag();
holder.workOrderName.setText(pendingWO.toString());
holder.workOrderState.setText(“Estado操作系统:+pendingWO.getWorkOrderState()+”-“
+pendingWO.getWorkOrderStateName());
holder.priority.setText(“Prioridade:+pendingWO.getPriority());
holder.plannedDate.setText(“数据前置:
+pendingWO.getPlannedDate());
holder.asset.setText(“Ativo:+pendingWO.getAsset()+”-“
+pendingWO.getAssetName());
holder.flagIcon.setImageDrawable(pendingWO.getFlag());
holder.chkDownloadWorkOrder.setChecked(pendingWO.isSelected());
if(pendingWO.isChkVisible()){
holder.chkDownloadWorkOrder.setVisibility(视图V