저는 Parse.com 프레임 워크를 사용하고 있으며 최근에로드 - 더 (onScroll) ListView를 코드에 추가했습니다. 그러나 load-more 프로세스가 시작될 때마다 이전 항목도 다시로드된다는 것을 알게되었습니다. query.setSkip(someCustomSkip);
을 추가하면 load-more 프로세스 후에 (someCustomSkip) 번호없이 항목을 삭제합니다.모든 ListView 항목을 다시로드하지 않는 방법은 무엇입니까?
당신이 어떤 식으로 생각하니, 어떻게 query.setSkip()을 사용할 수 있습니까? 방법과 또한 경건한 것들을 보존?
1) ListView를 최초 위치를 제한하는 위치하도록 스크롤 한 후 5 위치 query.setLimit(mListView.getCount + 5)
2)의 ListView 스크롤 전에. 그것은이 위치에 나를 던져 세트 건너 - 처음 5 개 항목
또한이 질문에 대한 중요한 내 코드의 일부 숨 깁니다 : 어떤 제안에 대해 사전에
public class Fragment1 extends Fragment {
static ListView mListView;
static AnimalAdapter mAdapter;
static ProgressBar mProgressBar;
static EditText mEditText;
static 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 footie = getActivity().getLayoutInflater().inflate(R.layout.footer, null);
mListView.addFooterView(footie);
footie.setVisibility(View.INVISIBLE);
mProgressBar = (ProgressBar) rootView.findViewById (R.id.loading_animals);
mProgressBar.setVisibility(View.VISIBLE);
RemoteDataTask task = new RemoteDataTask();
task.execute();
return rootView;
}
public void updateData() { //method, which updates my data
mListView = (ListView)getView().findViewById(R.id.animal_list);
final ParseQuery<Animal> query = ParseQuery.getQuery(Animal.class);
query.setCachePolicy(CachePolicy.NETWORK_ONLY);
query.orderByAscending("animal");
query.setLimit(mListView.getCount() + 5);
if (mListView.getCount() > 5) {
query.setSkip(5);
}
query.findInBackground(new FindCallback<Animal>() {
@Override
public void done(List<Animal> animals, ParseException error) {
if(animals != null){
mAdapter.clear();
mProgressBar = (ProgressBar) getView().findViewById (R.id.loading_animals);
mProgressBar.setVisibility(View.INVISIBLE);
RelativeLayout footie = (RelativeLayout) getView().findViewById(R.id.footerview);
footie.setVisibility(View.VISIBLE);
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) {
return null;
}
@Override
protected void onPostExecute(Void result) {
mListView = (ListView) getView().findViewById(R.id.animal_list);
mEditText = (EditText) getView().findViewById(R.id.search_animal);
mAdapter = new AnimalAdapter(getActivity(), new ArrayList<Animal>());
mListView.setVisibility(View.VISIBLE);
mListView.setTextFilterEnabled(true);
mListView.setAdapter(mAdapter);
mListView.setOnScrollListener(new OnScrollListener() {
//my OnScrollListener
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount) {
if (mListView.getCount() > 20) {
RelativeLayout footie = (RelativeLayout) getView().findViewById(R.id.footerview);
mListView.removeFooterView(footie);
}
else{
updateData();
}
}
}
@Override
public void onScrollStateChanged(AbsListView view,
int scrollState) {
if (SCROLL_STATE_TOUCH_SCROLL == scrollState) {
View currentFocus = getActivity().getCurrentFocus();
if(currentFocus != null) {
currentFocus.clearFocus();
}
}
}
});
mListView.setAdapter(mAdapter);
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());
}
});
}
}
}
감사합니다 !
감사합니다. 나는 그 어댑터에 대해 몰랐다! 그리고 그것을 무시하고 추가 어댑터 데이터를 추가 할 수 있습니까? MyAdapter extends ParseQueryAdapter'를 사용해야합니까? – marson
예, 쿼리에 따라'create()'를 커스터마이징해야합니다. 내 것이 단지 예였습니다. – Emmanuel
다시 한번 감사 드리며, 많은 도움이되었습니다. 나는 그것을 할거야 – marson