2016-10-12 11 views
0

私のconvertViewアダプターでは、QBuserからユーザー名を取得する必要があります。私はArrayList<Integer> userIds = new ArrayList<>();を使用するので、ユーザーIDのみを持っています。それは動作しますが、リストに表示するのに遅延があり、リストビューのすべてのユーザー名も変更されます。メインアクティビティやアレイアダプターで使用する必要がありますか?これは私のsetTextです:lblFrom.setText(result.getLogin());AndroidアレイアダプターQuickblox settext delay

public View getView(int position, View convertView, ViewGroup parent) { 

    QBChatMessage m = messagesItems.get(position); 


    LayoutInflater mInflater = (LayoutInflater) context 
      .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    // Identifying the message owner 
    if(messagesItems.get(position).getSenderId()==null) 
    { 
     convertView = mInflater.inflate(R.layout.list_item_message_left, 
       null); 

    }  else 
    if (messagesItems.get(position).getSenderId()==myID) { 
     // message belongs to you, so load the right aligned layout 
     convertView = mInflater.inflate(R.layout.list_item_message_right, 
       null); 
    } else { 
     // message belongs to other person, load the left aligned layout 
     convertView = mInflater.inflate(R.layout.list_item_message_left, 
       null); 
    } 

    final TextView lblFrom = (TextView) convertView.findViewById(R.id.lblMsgFrom); 
    TextView txtMsg = (TextView) convertView.findViewById(R.id.txtMsg); 

    txtMsg.setText(m.getBody()); 
    if (messagesItems.get(position).getSenderId()==null){ 
     lblFrom.setText("Me"); 

    }else 
    { 

     ArrayList<Integer> userIds = new ArrayList<>(); 
     userIds.add(messagesItems.get(position).getSenderId()); 
     QBUsers.getUsersByIDs(userIds, new QBPagedRequestBuilder(userIds.size(), 1), new QBEntityCallbackImpl<ArrayList<QBUser>>() { 
      @Override 
      public void onSuccess(ArrayList<QBUser> results, Bundle params) { 
       super.onSuccess(results,params); 

       for (QBUser result : results) 
       { 

        lblFrom.setText(result.getLogin()); 
       } 


      } 
     }); 
    } 


    return convertView; 
} 

答えて

0

私が見る唯一の遅延はQBPagedRequestBuilderコール内のデータのネットワーク要求で、あなたは、リスト内の個々のユーザーのためにこれをやっています。単一のユーザーを配列にロードし、データをフェッチしてからレスポンスをループして(うまくいけば)、TextViewにデータを取り込みます。

アクティビティの1回の呼び出しですべてのユーザー名を取得し、そのデータをリストにロードしてからアダプタでnotifyDataSetChanged()を呼び出すことをお勧めします。これははるかに高速かもしれません。

+0

ありがとうございます。簡単なコードで説明できますか? – suresh