목록 뷰를 작성하고 무한 스크롤을 구현했습니다. 목록 뷰는 끝에 도달 할 때까지로드 당 5 개의 항목을 표시하도록 제한되지만 처음 5 개의 항목을 복제합니다. 더 잘 이해할 수 있도록 몇 가지 이미지 : 안드로이드에서 무한 스크롤로 목록보기 반복 항목
내가 그것을 어떻게 해결할 수 있습니까?public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
rootView = inflater.inflate(R.layout._fragment_clientes, container, false);
rootView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
try {
lv = (ListView) rootView.findViewById(R.id.listaClientes);
clientes = new ArrayList<ClienteModel>();
final ClientViewAdapter ad = new ClientViewAdapter(getActivity(), this, clientes);
lv.setVerticalFadingEdgeEnabled(true);
lv.setVerticalScrollBarEnabled(true);
lv.setOnScrollListener(new EndlessScrollListener(){
@Override
public void onLoadMore(int page, int totalItemsCount) {
new LoadMoreClientTask(progressBar,FragmentClientes.this,ad,getActivity()).execute(page);
}
});
lv.addFooterView(footerLinearLayout);
lv.setAdapter(ad);
new LoadMoreClientTask(progressBar,this,ad,getActivity()).execute(1);
} catch (Exception e) {
e.printStackTrace();
}
return rootView;
}
어댑터 대 :
public class ClientViewAdapter extends BaseAdapter {
private Activity activity;
private FragmentClientes frag;
private List<ClienteModel> cliente;
private static LayoutInflater inflater=null;
public ClientViewAdapter(Context context, FragmentClientes fragmentClientes, List<ClienteModel> clientes) {
this.inflater = LayoutInflater.from(context);
this.cliente = clientes;
frag = fragmentClientes;
}
public int getCount() {
return cliente.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holder;
if(convertView == null){
vi = inflater.inflate(R.layout.fragment_cliente_item, null);
holder=new ViewHolder();
holder.id = (TextView)vi.findViewById(R.id.clienteId);
holder.nome = (TextView)vi.findViewById(R.id.clienteNome);
holder.tipo = (TextView)vi.findViewById(R.id.clienteTipo);
vi.setTag(holder);
}else{
holder = (ViewHolder)vi.getTag();
}
ClienteModel item = new ClienteModel();
item = cliente.get(position);
holder.id.setText(String.valueOf(item.getClientes_id()));
holder.nome.setText(item.getNome());
holder.tipo.setText(item.getTipo());
return vi;
}
public void setData(List<ClienteModel> clientes){
this.cliente.addAll(clientes);
this.notifyDataSetChanged();
}
public class ViewHolder
{
TextView id;
TextView nome;
TextView tipo;
}
}
그리고 데이터베이스에서 데이터를 가져옵니다 LoadMoreTask 조각 :
protected Boolean doInBackground(Integer... parameters) {
int npagina = parameters[0];
cliente= new ArrayList<ClienteModel>();
try {
Repositorio mRepositorio = new Repositorio(context);
List listaDeClientes = mRepositorio.getClientes(npagina,5,"");
cliente = listaDeClientes;
System.out.println("pagina " + npagina);
}catch (Exception e){
e.printStackTrace();
return false;
}
return true;
}
기능 getClientes :
public List<ClienteModel> getClientes(Integer pagina, Integer limit, String consulta) throws SQLException {
Integer offset = pagina * limit - limit;
List<ClienteModel> listaDeRegistros = new ArrayList<ClienteModel>();
if(consulta.isEmpty()) {
query = "SELECT * FROM " + tabelaCLIENTES + " WHERE credencial_id = " + mSessao.getString("id_credencial") + " LIMIT " + offset + ", " + limit;
}else {
query = "SELECT * FROM " + tabelaCLIENTES + " WHERE (credencial_id = " + mSessao.getString("id_credencial") + ") and (nome LIKE '%"+consulta+"%') LIMIT " + offset + ", " + limit;
}
System.out.println(query);
try {
Cursor mCursor = bd.rawQuery(query, null);
if (mCursor.getCount() > 0) {
if (mCursor.moveToFirst()) {
do {
ClienteModel mClienteModel = new ClienteModel();
mClienteModel.setClientes_id(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.CLIENTES_ID)));
mClienteModel.setId_rm(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.ID_RM)));
mClienteModel.setCredencial_id(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.CREDENCIAL_ID)));
mClienteModel.setNome(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.NOME)));
mClienteModel.setTipo(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.TIPO)));
mClienteModel.setInformacao_adicional(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.INFORMACAO_ADICIONAL)));
mClienteModel.set_criado(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._CRIADO)));
mClienteModel.set_modificado(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._MODIFICADO)));
mClienteModel.set_status(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._STATUS)));
listaDeRegistros.add(mClienteModel);
} while (mCursor.moveToNext());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return listaDeRegistros;
}
'에서 System.out.println ("PAGINA"+ npagina) 무엇을,'인쇄를? 아래로 스크롤 할 때마다 증가합니까? – Leo
@Leo 예, 페이지 수가 줄어들면서 아래로 스크롤합니다. – AND4011002849