2016-12-20 20 views
1

アクティビティには、編集テキスト、送信ボタン、およびサーバーからデータを取得するリストビューが含まれます。しかしアイテムを追加した後にリストビューが下にスクロールしない

editText.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

      getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 
      scrollMyListViewToBottom(); 
      Log.i("yoyo","ListSize Before: " + size); 
    } 
}); 

私は送信ボタンをクリックし、notifydatasetchanged();が呼び出されたときに、リストビューの更新後に、そうでないとき、私は、編集テキストをクリックすると、それがになっているとして、それは下にスクロールします下にスクロールします。 CommentQuery();で何が起こっているのか不思議であれば、より多くのコードを提供できます。

submitComment.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      commentItem = new ParseObject("CommentItem"); 
      commentItem.put("parentUser", feedUserName); 
      commentItem.put("parentFeed", feedItem); 
      // commentItem.put("parentObjectId", objectId); 
      commentItem.put("commentText", String.valueOf(commentText.getText())); 
      commentItem.put("username", ParseUser.getCurrentUser().getUsername()); 
      commentItem.put("country", ParseUser.getCurrentUser().getInt("country")); 
      commentItem.put((ParseUser.getCurrentUser().getUsername() + "globalPoints"), 0); 
      commentItem.put("parentObjectId", objectId); 
      replies +=1; 


      commentItem.saveInBackground(new SaveCallback() { 
       @Override 
       public void done(ParseException e) { 
        if (e == null) { 
         arrayCommentList.clear(); 
         comments.clearCachedResult(); 
         CommentQuery(); 
        customCommentListViewAdapter.notifyDataSetChanged(); 

         Log.i("yoyo","ListSize After: " + size); //size changes like it is supposed to 

         scrollMyListViewToBottom(); //doesn't do anything 
        } 
       } 
      }); 

     } 
    }); 

scrollMyListViewToBottom()関数:

public void scrollMyListViewToBottom() { 
    commentList.post(new Runnable() { 
     @Override 
     public void run() { 
      // Select the last row so it will scroll into view... 

      commentList.setSelection(size); 
     } 
    }); 

} 

CommentQuery機能:

public void CommentQuery(){ 

    comments = new ParseQuery<>("CommentItem"); 
    comments.setLimit(99); 
    comments.whereEqualTo("parentObjectId", objectId); 
    comments.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> mobjects, ParseException e) { 

      if(e == null){ 

       for(ParseObject object : mobjects){ 

        parseObs = mobjects; 

        size = parseObs.getsize(); 

        commentData = new HashMap<>(); 
        commentData.put("username", object.getString("username")); 
        commentData.put("feed", object.getString("commentText")); 
        commentData.put("likes", String.valueOf(object.getInt("likes"))); 
        commentData.put("country", String.valueOf(object.getInt("country"))); 
        commentData.put("replies", String.valueOf(0)); 
        commentData.put("global", String.valueOf(object.getInt(usernameText+"globalPoints"))); 

        arrayCommentList.add(commentData); 

       } 
       customCommentListViewAdapter = new CustomCommentListViewAdapter(getApplicationContext(), arrayCommentList); 
       commentList.setAdapter(customCommentListViewAdapter); 
      } 

     } 
    }); 

} 
+0

あなたは 'size'を増やすようには思われないので、私はスクロールが変更されないことを期待します。 –

+0

ログを読むと、 'size'が変わったと言われます。 @MattClark – grant

+0

ログを投稿したことがありますか?) –

答えて

1

ファースト - これをしないでください。 parseObs = mobjects;parseObsを使用して設定したアダプタは、そのリストへの参照を失っただけです。

代わりにこれを行う必要があります。

parseObs.clear(); 
parseObs.addAll(mobjects); 

次に、size = parseObs.getsize();は間違いなくループ内にある必要はありません。リストの反復処理中にリストのサイズが変更されるべきではありません。


最後に、これはすでにあなたが解析コールバックの内側に何をしたいん

customCommentListViewAdapter = new CustomCommentListViewAdapter(getApplicationContext(), arrayCommentList); 
commentList.setAdapter(customCommentListViewAdapter); 

あなたは再びアダプターに通知する必要はありません。

CommentQuery(); 
// customCommentListViewAdapter.notifyDataSetChanged(); // Not necessary 

その後、CommentQuery非同期です。

arrayCommentList.clear(); // List is now empty 
... 
CommentQuery(); // doing stuff ... in the background 
.. 
scrollMyListViewToBottom(); // there isn't anything to scroll to yet! 

基本的に、溶液は、リストビューは、データを含む後であろうCommentQuery()done { }メソッドブロック内scrollMyListViewToBottom()です。

私がコメントで言ったように、sizeは変数として必要ではありません。ちょうど使用するcustomCommentListViewAdap‌​ter.getCount()

+0

'done {}'に 'scrollMyListViewToBottom()'を置くことが必要でした!また、 'size'を削除して' customCommentListViewAdap ter.getCount() 'に戻しました。魅力のように動作します。 – grant

+0

喜んで聞いてください。私はあなたのコメントで "大きさが変わったように見える"というメッセージが表示されているのか分かりません。 –

+0

リストビューのサイズがリストの更新後に増えていることをログに表示しました – grant

関連する問題