2016-04-22 4 views
0

私のアプリケーションでは、私はLinkedListでListViewをバックアップしています。私は、リストを埋めるためにカスタムArrayAdapterを使用しています:私は実現カスタムArrayAdapterでリストを安全に使用するにはどうすればよいですか?

public class CustomArrayAdapter extends ArrayAdapter<Message> { 

    Context context; 
    int resource; 

    public CustomArrayAdapter(Context context, int resource, List<Message> messages) { 
     super(context, resource, messages); 
     this.context = context; 
     this.resource = resource; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     MessageHolder messageHolder = null; 

     if(row == null){ 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(resource, parent, false); 
      messageHolder = new MessageHolder(); 
      messageHolder.chat_information = (TextView) row.findViewById(R.id.chat_information); 
      messageHolder.chat_message = (TextView) row.findViewById(R.id.chat_message); 

      row.setTag(messageHolder); 
     } else { 
      messageHolder = (MessageHolder) row.getTag(); 
     } 

     Message message = getItem(position); 
     messageHolder.chat_information.setText(message.getSenderName() + Constants.NEWLINE + message.getSendTime()); 
     messageHolder.chat_message.setText(message.getMessageText()); 

     return row; 
    } 

    private class MessageHolder { 
     TextView chat_information; 
     TextView chat_message; 
    } 
} 

、しかし、そのLinkedListのは、スレッドセーフではありません。 ConcurrentLinkedQueueまたはLinkedBlockingDequeを使用しますが、配列を返すだけで、アダプタにはListが必要です。

このカスタムArrayAdapterをこれらのスレッドセーフメソッドの1つを使用するように変更する方法はありますか、またはリストを使用するためにオブジェクトの配列を反復処理する必要がありますか?

+0

これはちょうど重複していないかもしれませんが、これを見て傷つくことはありません[回答](http://stackoverflow.com/a/6244952/5015207) – 0X0nosugar

+1

あなたは、メインスレッド – tynn

答えて

0

私が代わりに内部SQLiteデータベースを使用するようにリストを変換することになった、とリストビューをバックアップするためにSimpleCursorAdapterを使用しました。

関連する問題