У меня есть ArrayAdapter
, который собирает информацию с AsyncTask.
. AsyncTask
запускается на прослушивающем прокрутке. Когда пользователь прокручивает нижнюю часть содержимого, запускается AsyncTask
и загружает больше контента. Проблема в том, что я внедрил кнопку сброса. То, что это делает, очищает ArrayAdapter
и сбрасывает токены, которые отправляются через JSON в скрипт php, который собирает информацию. Кнопка сброса не работает вообще. Когда я звоню clear()
, он иногда очищает список, а затем добавляет новые данные, но тогда onScrollListener
не работает или он не очищает список и просто добавляет новые данные в начало списка. Вот мой код, весь этот код находится в том же самом действии.Clear() ArrayAdapter не работает должным образом - Android
GLOBAL КЛАСС ДЛЯ лексем ПОСЛАН К PHP SCRIPT
class CommentInfo {
public CommentInfo() {}
private String commentID;
private int gatheredComments;
private int totalComments;
public String getCommentID(){
return commentID;
}
public void setCommentID(String c){
commentID = c;
}
public int getGatheredComments(){
return gatheredComments;
}
public void setGatheredComments(int forNumber){
gatheredComments = forNumber;
}
}//end commentInfor class
final CommentInfo info = new CommentInfo();
info.setCommentID("0");
Этот класс содержит глобальные переменные. CommentID установлен в 0. Это отправляется на PHP-скрипт через Json. После того, как он соберет группу комментариев, он сбрасывает идентификатор CommentID в ID последнего собранного комментария. Когда нажата кнопка «Сброс», она сбрасывает значение CommentID в 0, как если бы активность только начиналась.
AsyncTask, собирающий КОММЕНТАРИИ И ИСПОЛЬЗУЕТ глобальные переменные
class loadComments extends AsyncTask<JSONObject, String, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progDailog.getWindow().setGravity(Gravity.BOTTOM);
progDailog.setIndeterminate(false);
progDailog.setCancelable(false);
progDailog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
progDailog.show();
progDailog.setContentView(R.layout.progress_circle);
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
protected JSONObject doInBackground(JSONObject... params) {
JSONObject json2 = CollectComments.collectComments(usernameforcomments, info.getCommentID());
return json2;
}
@Override
protected void onPostExecute(JSONObject json2) {
progDailog.dismiss();
try {
if (json2.getString(KEY_SUCCESS) != null) {
registerErrorMsg.setText("");
String res2 = json2.getString(KEY_SUCCESS);
if(Integer.parseInt(res2) == 1){
JSONArray commentArray = json2.getJSONArray(KEY_COMMENT);
String comments[] = new String[commentArray.length()];
for (int i=0; i<commentArray.length(); i++) {
comments[i] = commentArray.getString(i);
}
JSONArray contentsArray = json2.getJSONArray(KEY_CONTENT);
String contents[] = new String[contentArray.length()];
for (int i=0; i<contentArray.length(); i++) {
contents[i] = contentArray.getString(i);
}
JSONArray usernameArray = json2.getJSONArray(KEY_USERNAME);
String usernames[] = new String[usernameArray.length()];
for (int i=0; i<usernameArray.length(); i++) {
usernames[i] = usernameArray.getString(i);
}
final List <Item> tempList2 = new ArrayList <Item>();
String tempForNumber = json2.getString(KEY_COMMENTS_GATHERED);
int forNumber = Integer.parseInt(tempForNumber);
for (int x = 0; x < forNumber;x++){
tempList2.add (new Item (usernames [x], contents[x], comments[x]));
}
customAdapter.addAll(tempList2);
String commentID = json2.getString(KEY_COMMENT_ID);
info.setCommentID(commentID);
info.setGatheredComments(forNumber);
if (info.getTotalComments() >= Integer.parseInt(json2.getString(KEY_NUMBER_OF_COMMENTS))){
int tempNum = Integer.parseInt(json2.getString(KEY_NUMBER_OF_COMMENTS));
info.setTotalComments(tempNum);
}
try
{
Thread.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
}//end if key is == 1
else{
// Error in registration
registerErrorMsg.setText(json2.getString(KEY_ERROR_MSG));
}//end else
}//end if
} //end try
catch (JSONException e) {
e.printStackTrace();
}//end catch
}
}
Asynctask
собирает несколько элементов и помещает их в ArrayAdapter.
это ArrayAdapter
то, что я стараюсь ясно, но он никогда не работает правильно.
ЭТО НА SCROLL LISTENER, который активирует AsyncTask
class EndlessScrollListener implements OnScrollListener {
private int visibleThreshold = 5;
private boolean loading = true;
public EndlessScrollListener() {
}
public EndlessScrollListener(int visibleThreshold) {
this.visibleThreshold = visibleThreshold;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (firstVisibleItem + visibleItemCount) == totalItemCount) {
new loadComments().execute();
loading = true;
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}
Я считаю, что проблема возникает из-за чего-то в этом классе. Я не уверен, во что я верю. Может быть, потому, что перечисленные ниже переменные не сбрасываются или что-то в этом роде.
INT firstVisibleItem, внутр visibleItemCount, внутр totalItemCount
ЭТО КАК СБРОСИТЬ ARRAYADAPTER
refresh = (ImageView) findViewById(R.id.refresh);
refresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(customAdapter!= null)
{
customAdapter.clear();
info.setCommentID("0");
info.setGatheredComments(0);
yourListView.smoothScrollToPosition(0);
new loadComments().execute();
}
}
});
пользовательский адаптер имя моего адаптера и youListView это имя my ListView.
Пожалуйста, помогите объяснить, почему адаптер не очищается, и если он OnScrollListener
перестает работать.
Я сделал это, и он убедится, что listView очищен, но onscrollListener не работает. –
Ну. если ваш список пуст, вам нечего прокручивать. Разве это не очевидно. – Varun
На самом деле я поместил код 'new loadComments(). Execute();' вызывается однажды, когда я нажимаю reset, чтобы он добавлял новые данные в listView. Он добавляет те же данные, что и активность только что началась, но onScrollListener не работает. Он действует так, как будто содержимое ArrayAdapter все еще существует. –