Ich habe ein Fragment erstellt und ich füllen eine Listenansicht in es mit Retrofit für Netzwerkverbindung und Anfrage erhalten und ich erstellte benutzerdefinierten Adapter, um Listenansicht zu füllen:Wie man eine Art faulen Laden in meinem listview android studio
public class TransactionsAdapter extends BaseAdapter {
ArrayList<Transactions> transactions;
public TransactionsAdapter(ArrayList<Transactions> transactions) {
this.transactions=transactions;
}
@Override
public int getCount() {
if (transactions.size()<20) {
return transactions.size();
}else return 20;
}
@Override
public Object getItem(int position) {
return transactions.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=null;
ViewHolder viewHolder = null;
if(convertView == null)
{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.izvjestaji_item,parent,false);
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
}
else{
view = convertView;
viewHolder= (ViewHolder) view.getTag();
}
Transactions transactions = (Transactions) getItem(position);
if(transactions != null) {
viewHolder.datum.setText(transactions.getShortDate());
viewHolder.partner.setText(transactions.getMerchantName());
String doublestring=Double.toString(transactions.getTransactionPointsAmount());
String doublestring1=Double.toString(transactions.getSalesAmount());
viewHolder.iznos.setText(doublestring1);
viewHolder.brojbodova.setText(doublestring);
}
return view;
}
private class ViewHolder{
TextView datum;
TextView partner;
TextView iznos;
TextView brojbodova;
public ViewHolder(View view) {
this.datum = (TextView) view.findViewById(R.id.izvjestaji_datum);
this.partner = (TextView) view.findViewById(R.id.izvjestaji_partner);
this.iznos = (TextView) view.findViewById(R.id.izvjestaji_iznos);
this.brojbodova=(TextView)view.findViewById(R.id.izvjestaji_brojbodova);
}
}
}
Ich habe 2 Layouts für Artikel und für Listenansicht erstellt und es funktioniert alles wie es sollte. Jetzt muss ich eine Art von Lazy Load oder etwas einfacher hinzufügen, weil es eine Chance gibt, dass der Server eine Menge Daten zurückgibt und ich möchte sie 20 mal 20 zeigen, um das Netzwerk effizienter zu machen. Das ist mein Fragment Code:
public class Izvjestaji extends Fragment {
// The onCreateView method is called when Fragment should create its View
object hierarchy,
// either dynamically or via XML layout inflation.
ListView list;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle
savedInstanceState) {
// Defines the xml file for the fragment
return inflater.inflate(R.layout.izvjestaji, parent, false);
}
// This event is triggered soon after onCreateView().
// Any view setup should occur here. E.g., view lookups and attaching view
listeners.
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
list=(ListView)view.findViewById(R.id.izvjestaji_list);
showList();
// Setup any handles to view objects here
// EditText etFoo = (EditText) view.findViewById(R.id.etFoo);
}
public void showList(){
NetworkSDK.getInstance().getTransactions(new
Callback<List<Transactions>>() {
@Override
public void onResponse(Call<List<Transactions>> call,
Response<List<Transactions>> response) {
if(response.isSuccess()){
Log.d("Data", String.valueOf(response.isSuccess()));
TransactionsAdapter transactionsAdapter=new
TransactionsAdapter((ArrayList<Transactions>)response.body());
list.setAdapter(transactionsAdapter);
}
}
@Override
public void onFailure(Call<List<Transactions>> call, Throwable t) {
Log.d("Error","Def error");
}
});
}
}
Das ist mein Aufruf von Network SDK in Retrofit
public void getTransactions(Callback<List<Transactions>>callback){
Call<List<Transactions>>call =
BaseClient.getService().getTransactions(4,2016);
call.enqueue(callback);
}
Aus all dem ich ein Listview in meinem Fragment erhalten, die alle verfügbaren Transaktionen zeigen, dass ich möchte zeige, aber ich muss es auf etwa 20 begrenzen und wenn Benutzer Swipe unten muss es zeigen, 20 und so weiter. Ich habe eine Idee, eine Indexnummer zu senden, wenn der Benutzer wischt oder ähnliches, aber ich bin sicher, dass es einen einfacheren Weg gibt, weil ich nicht so gut mit Android bin.
Ich habe auch versucht, Dinge wie endlose Adapter, aber ich darf nicht Bibliotheken verwenden, wie Retrofit oder Volley nicht wirklich beliebt sind und diese: https://github.com/commonsguy/cwac-endless nicht suppor Bereitstellung von mehr und ich bin nicht einmal sicher ist es noch gültig