Taking as a start I'm finishing my android app, and I need to update my custom listview when I slide down the screen.
I am implementing SwipeRefreshLayout only that I got stuck in the part of the onRefresh method and I do not know how to update my list, I clarify my listview I filled it from a webservices using the Asyntask class.
I leave the code for my Layout and my activity
layout ..
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipeContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/clientes"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</android.support.v4.widget.SwipeRefreshLayout>
Activity
public class Clientes extends AppCompatActivity implements SearchView.OnQueryTextListener{
ProgressDialog dialog;
ListView list;
ArrayList<CXCPSaldoClienteProveedor> cliArrayList = new ArrayList<CXCPSaldoClienteProveedor>();
ArrayList<String> searchlist;
MyArrayAdapter adaptador;
public static String O_Cliente = "O_Cliente";
DetalleMenu O_DetalleMenu;
TextView textView;
SwipeRefreshLayout mSwipeRefreshLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clientes);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Intent intent = getIntent();
O_DetalleMenu = (DetalleMenu) intent.getSerializableExtra("O_DetalleMenu");
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
adaptador.notifyDataSetChanged();
mSwipeRefreshLayout.setRefreshing(false);
}
});
list = (ListView) findViewById(R.id.clientes);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView idcli = (TextView) view.findViewById(R.id.clienid);
Intent intent = new Intent(Clientes.this, Detalle_Cliente.class);
intent.putExtra("O_Cliente", (CXCPSaldoClienteProveedor) ((TextView) view.findViewById(R.id.clienid)).getTag());
intent.putExtra("O_DetalleMenu", (DetalleMenu) O_DetalleMenu);
startActivity(intent);
}
});
AsynClien task = new AsynClien();
//Call execute
task.execute();
}
@Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_cliente, menu);
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
//permite modificar el hint que el EditText muestra por defecto
searchView.setQueryHint(getText(R.string.search));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
adaptador.filter("");
list.clearTextFilter();
} else {
adaptador.filter(newText);
}
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
private class AsynClien extends AsyncTask<String, ArrayList, ArrayList> {
@Override
protected ArrayList doInBackground(String... params) {
cliArrayList = webService.Clientes(O_DetalleMenu.getDocumento());
return null;
}
@Override
//Make Progress Bar visible
protected void onPreExecute() {
dialog = new ProgressDialog(Clientes.this);
dialog.setIndeterminate(false);
dialog.setMessage("Cargando Clientes...");
dialog.setCancelable(false);
dialog.show();
}
//Once WebService returns response
@Override
protected void onPostExecute(ArrayList arrayList) {
super.onPostExecute(arrayList);
if (cliArrayList.size() != 0) {
dialog.dismiss();
adaptador = new MyArrayAdapter(Clientes.this, cliArrayList);///* no se usa your_array_list
//list.setAdapter(adaptador);
ListView listView = (ListView) findViewById(R.id.clientes);
listView.setAdapter(adaptador);
} else {
dialog.dismiss();
finish();
}
}
}
public class MyArrayAdapter extends ArrayAdapter<CXCPSaldoClienteProveedor>{
private List<CXCPSaldoClienteProveedor> searchList;
public MyArrayAdapter(Context context, ArrayList<CXCPSaldoClienteProveedor> ArrayClientes)
{
super(context, 0, ArrayClientes);
this.searchList = new ArrayList<>();
this.searchList.addAll(cliArrayList);
}
@Override
public int getCount() {
return cliArrayList.size();
}
public View getView(int position, View convertView, ViewGroup parent) {
RecyclerView.ViewHolder holder;
CXCPSaldoClienteProveedor O_Cliente = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_cliente, parent, false);
}
//Obteniendo instancias de los text views
TextView nombre = (TextView) convertView.findViewById(R.id.nombrecli);
TextView saldov = (TextView) convertView.findViewById(R.id.txtsaldov);
TextView saldot = (TextView) convertView.findViewById(R.id.txtsaldot);
TextView idcli = (TextView) convertView.findViewById(R.id.clienid);
//INICIALIZAR FORMAT
DecimalFormat numberFormat = new DecimalFormat("###,##0.00");
nombre.setText(O_Cliente.getClienteDescripcion());
nombre.setTag(O_Cliente);
saldov.setText(numberFormat.format(O_Cliente.getSaldoVencido()));
saldot.setText(numberFormat.format(O_Cliente.getSaldo()));
idcli.setText(String.valueOf(O_Cliente.getCliente()));
idcli.setTag(O_Cliente);
// Se almacena en settag el objeto Cliente
convertView.setTag(O_Cliente);
//Devolver al ListView la fila creada
return convertView;
}
public void filter(String newText) {
newText = newText.toLowerCase(Locale.getDefault());
cliArrayList.clear();
if (newText.length() == 0) {
cliArrayList.addAll(searchList);
} else {
for (CXCPSaldoClienteProveedor s : searchList) {
if (s.toLowerCase(Locale.getDefault()).contains(newText)) {
cliArrayList.add(s);
}
}
}
notifyDataSetChanged();
}
}
}
Refresh code
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);
mSwipeRefreshLayout.setDistanceToTriggerSync(20);// in dips
mSwipeRefreshLayout.setSize(SwipeRefreshLayout.DEFAULT);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new AsynClien().execute();
}
});