AsyncTask.
에서 정보를 수집하는 ArrayAdapter
이 있습니다. AsyncTask
은 스크롤 리스너에 의해 트리거됩니다. 사용자가 콘텐츠의 맨 아래로 스크롤하면 AsyncTask
이 트리거되고 더 많은 콘텐츠를로드합니다. 문제는 리셋 버튼을 구현 한 것입니다. 이것이하는 일은 ArrayAdapter
을 지우고 JSON을 통해 정보를 수집하는 PHP 스크립트로 전송되는 토큰을 재설정합니다. 재설정 버튼이 전혀 작동하지 않습니다. clear()
을 호출하면 때때로 목록이 지워지고 새 데이터가 추가되지만 onScrollListener
이 작동하지 않거나 목록을 지우지 않고 새 데이터를 목록의 맨 위에 추가합니다. 여기에 내 코드가있다.이 코드는 모두 같은 활동에있다. PHP 스크립트Clear() ArrayAdapter가 제대로 작동하지 않습니다 - Android
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");
이 클래스는 전역 변수가 포함되어 전송 토큰
GLOBAL CLASS. CommentID는 0으로 설정됩니다. 이것은 Json을 통해 PHP 스크립트로 전송됩니다. 일련의 주석을 수집 한 후, 마지막 주석의 ID로 CommentID를 재설정합니다. Reset 버튼을 클릭하면 Activity가 방금 시작된 것처럼 CommentID가 0으로 재설정됩니다. ArrayAdapter.
이 ArrayAdapter
에 전역 변수
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
는 여러 항목을 수집하고이를 배치를 코멘트를 수집 용도
AsyncTask를 내가 시도하고 명확하지만 잘 밖으로 작동하지 않을 것입니다.
이는 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) {
}
}
나는 문제는이 클래스에서 뭔가 발생하는 생각을 활성화 ON 스크롤 LISTENER이다. 나는 그곳에서 내가 무엇을 믿는 지 확신하지 못한다. 아래의 변수가 재설정되지 않았거나 뭔가가 있기 때문일 수 있습니다. 이것이 내가
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();
}
}
});
사용자 정의 어댑터 ArrayAdapter와 리셋 방법입니다
는INT firstVisibleItem, INT visibleItemCount, INT totalItemCount
내 어댑터의 이름이고 youListView이의 이름입니다 내 ListView.
누군가가 어댑터가 지워지지 않는 이유와 OnScrollListener
이 작동하지 않는 이유를 설명해주십시오.
나는이 작업을 수행했으며 listView가 지워 졌는지 확인하지만 onscrollListener는 작동하지 않습니다. –
음. 당신의 목록이 비어 있다면 아무 것도 스크롤 할 수 없습니다. 그렇게 명확하지 않습니다. – Varun
사실 나는'new loadComments(). execute();'가 리셋되면 listView에 새로운 데이터를 추가하기 위해 코드가 호출됩니다. 액티비티가 방금 시작되었지만 onScrollListener가 작동하지 않는 경우와 동일한 데이터를 추가합니다. 마치 ArrayAdapter의 내용이 여전히 존재하는 것처럼 작동합니다. –