![](/img/trans.png)
[英]How to rapidly update android listview as data is loaded from network
[英]Android: How to detect that all ListView objects are loaded
差不多一個星期,我想知道如何檢測所有ListView對象(行)的加載方式(不成功)。 我的ListView是Load-More類型(我已經將限制設置為5行,所以在每5行之后它會加載更多5行)。 我正在使用Parse.com框架。 加載整個列表后,我想刪除頁腳視圖。 有關詳情,請參閱下面的代碼。
你有任何想法或建議,如何完成它?
提前致謝。
public class Fragment1 extends Fragment {
private ListView mListView;
private AnimalAdapter mAdapter;
ProgressBar mProgressBar;
EditText mEditText;
RelativeLayout mRelativeLayout;
ProgressBar oProgressBar;
LinearLayout mLinearLayout;
Context context;
LayoutInflater inflater;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.animalsfrag, container, false);
mListView = (ListView)rootView.findViewById(R.id.animal_list);
View header = getActivity().getLayoutInflater().inflate(R.layout.header, null);
header.setPadding(2, 8, 4, 2);
mListView.setVisibility(View.INVISIBLE);
mListView.requestFocus();
mListView.addHeaderView(header);
View footer = getActivity().getLayoutInflater().inflate(R.layout.footer, null);
mListView.addFooterView(footer);
footer.setVisibility(View.VISIBLE);
mProgressBar = (ProgressBar) rootView.findViewById (R.id.loading_animals);
mProgressBar.setVisibility(View.VISIBLE);
RemoteDataTask task = new RemoteDataTask();
task.execute();
return rootView;
}
public void updateData() { //Main area no.1
mListView = (ListView)getView().findViewById(R.id.animal_list);
int limit = mListView.getCount() + 5;
ParseQuery<Animal> query = ParseQuery.getQuery(Animal.class);
query.setCachePolicy(CachePolicy.CACHE_THEN_NETWORK);
query.orderByAscending("animal");
query.setLimit(limit);
Toast.makeText(getActivity(), "now", Toast.LENGTH_SHORT).show();
query.findInBackground(new FindCallback<Animal>() {
@Override
public void done(List<Animal> animals, ParseException error) {
if(animals != null){
mAdapter.clear();
mProgressBar.setVisibility(View.INVISIBLE);
for (int i = 0; i < animals.size(); i++) {
mAdapter.add(animals.get(i));
}
}
}
});
}
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
updateData();
return null;
}
@Override
protected void onPostExecute(Void result) {
mListView = (ListView) getView().findViewById(R.id.animal_list);
// Pass the results into ListViewAdapter.java
mAdapter = new AnimalAdapter(getActivity(), new ArrayList<Animal>());
mListView.setAdapter(mAdapter);
mListView.setVisibility(View.VISIBLE);
mListView.setTextFilterEnabled(true);
mListView.setAdapter(mAdapter);
mAdapter = new AnimalAdapter(getActivity(), new ArrayList<Animal>());
mListView = (ListView) getView().findViewById(R.id.animal_list);
mAdapter = new AnimalAdapter(getActivity(), new ArrayList<Animal>());
mListView.setAdapter(mAdapter);
mListView.setAdapter(mAdapter);
mEditText = (EditText) getView().findViewById(R.id.search_animal);
mListView.setOnScrollListener(new OnScrollListener() {
@Override //Main area no.2
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount) {
updateData();
}
mListView.setFooterDividersEnabled(false);
}
@Override
public void onScrollStateChanged(AbsListView view,
int scrollState) {
if (SCROLL_STATE_TOUCH_SCROLL == scrollState) {
View currentFocus = getActivity().getCurrentFocus();
if(currentFocus != null) {
currentFocus.clearFocus();
}
mEditText = (EditText) getActivity().findViewById(R.id.search_animal);
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
}
}
});
mEditText.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s,
int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
System.out.println("Text ["+s+"]");
mAdapter.getFilter().filter(s.toString());
}
});
}
}
}
首先,您應該檢查項目的總數
例如:20項
然后最初setLimit = 5並且在你的“Loadmore”異步任務中,你應該跳過像“setSkip”這樣的先前值。所以它不會加載前5個項目並查詢接下來的5個項目
這樣,您可以檢查最后一個塊是否已加載,一旦加載了20個項目,請刪除頁腳。
我希望這有幫助。
您可以查看此鏈接並使用listvieew中的滾動:onScrollListener的實現,以檢測ListView中滾動的結束
並在滾動的結束動作中刪除您的頁腳..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.