2016-04-04 29 views
2

Bir parça oluşturdum ve ağ bağlantısı için Retrofit kullanarak bir liste görünümü doluyum ve istek aldım ve liste görünümünü doldurmak için özel adaptör oluşturdum:Listemde bir çeşit tembel yük nasıl yapılır 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); 
    } 
} 
} 

Öğe ve liste görünümü için 2 düzen oluşturdum ve her şey olması gerektiği gibi çalışıyor. Şimdi bir çeşit tembel yük veya daha basit bir şey eklemem gerekiyor çünkü sunucunun çok fazla veriyi geri getirme şansı var ve ağ verimliliğini artırmak için 20'ye 20 kadar göstermek istiyorum.

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"); 

     } 
    }); 
} 
} 

Bu Tüm bunlara dayanarak güçlendirme

public void getTransactions(Callback<List<Transactions>>callback){ 
    Call<List<Transactions>>call =                           
    BaseClient.getService().getTransactions(4,2016); 
      call.enqueue(callback); 
} 

Ağ SDK benim kararım İstediğim mevcut tüm işlemleri göstermek benim parçadaki bir liste görünümü olsun: Bu benim parçası kodudur göster ama 20'ye sınırlamanız gerekiyor ve kullanıcı Swipe alttan başka 20 tane göstermesi gerekiyor. Kullanıcı tokatlamak veya benzer bir şey olduğunda bazı indeks numarası göndermek gibi bir fikrim var ama eminim ki daha kolay bir yol var çünkü ben android ile o kadar iyi değilim.

Ben de sonsuz adaptör gibi şeyler denedim ama bir tadilat veya voleybolu gibi gerçekten popüler değil kütüphaneleri kullanmak için izin değilim ve bu bir: o hala https://github.com/commonsguy/cwac-endless artık suppor sağlamıyor ve ben bile emin değilim listenin aşağı kaydırılıp kaydırılmadığını belirlemek için geçerli

cevap

0

OnScrollListener kullanın. ve ardından veriyi yükleyin. Veri yüklemeden sonra, adaptördeki listenizi yenilemeyi unutmayınız.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (position == getCount() - 1) { // scrolled to last item 
     if (mRepo.hasMore()) { // if there are more items than we are displaying 
      new MyAsyncLoaderTask().execute(); 
     } 
    } 
    // usual getView implementation follows... 
    return view; 
} 
:
public void updateInUi() { 

    // send your request and get list of updated items 
    List<> newItems = getYourUpdatedListHere() 
    yourDataList.addAll(newItems); 
    adapter.notifyDataSetChanged(); 
} 
0

listenin sonuna ulaşıldığında, algılamak için bir başka yöntem gibi sizin Adapter ait getView yöntem içeride