android
  • textview
  • newline
  • baseadapter
  • 2014-12-23 2 views 0 likes 
    0

    В основном я вставки текста вместе с символом новой строки в БД MySQL, как это:Android: Возникли проблемы с новой строки в TextView внутри BaseAdapter

    $message = 'Hello World' . "\n"; 
    $message .= 'This is a test' . "\n"; 
    $message .= 'Thanks; 
    

    При сохранении сообщения в БД, я попытался установить значение новой линии как \n, \\n, \\\n, \\\\n и даже <br> вместо \n затем используется fromHtml в приложении для Android, но ничего не получается.

    В db, я вижу, что есть новая линия.

    на Android приложение, которое я хочу, чтобы иметь символ новой строки, если какой-либо показал в TextView, я пробовал различные вещи, но ничего не работает, я пытался что-то вроде:

    String message = m.getMessage().toString(); 
        message = message.replaceAll("\\n", 
         System.getProperty("line.separator")); 
    

    Здесь вместо "\\n" я также пытались "\\\n", "\n" и даже "\\\\n"

    и:

    Spanned html = Html.fromHtml(m.getMessage()); 
    

    и:

    message.replaceAll("\n","<br />"); 
    message.replaceAll("\r\n","<br />"); 
    message.replaceAll("\r","<br />"); 
    

    И:

    android:singleLine="false" 
    

    С различными вещами пытался, в TextView я получаю текст как эти перестановки:

    Hello WorldThis is a testThanks 
    
    Hello World\This is a test\Thanks 
    
    Hello World\nThis is a test\nThanks 
    

    Вот мой полный код:

    public class MessageListAdapter extends BaseAdapter { 
    
        private Context context; 
        private List<ListMessage> messagesItems; 
    
        public MessageListAdapter(Context context, List<ListMessage> navDrawerItems) { 
         this.context = context; 
         this.messagesItems = navDrawerItems; 
        } 
    
        @Override 
        public int getCount() { 
         return messagesItems.size(); 
        } 
    
        @Override 
        public Object getItem(int position) { 
         return messagesItems.get(position); 
        } 
    
        @Override 
        public long getItemId(int position) { 
         return position; 
        } 
    
        @SuppressLint("InflateParams") 
        @Override 
        public View getView(int position, View convertView, ViewGroup parent) { 
    
         /** 
         * The following list not implemented reusable list items as list items 
         * are showing incorrect data Add the solution if you have one 
         * */ 
    
         ListMessage m = messagesItems.get(position); 
    
         LayoutInflater mInflater = (LayoutInflater) context 
           .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    
         // Identifying the message owner 
         if (messagesItems.get(position).isSelf()) { 
          // 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); 
         } 
    
         TextView lblFrom = (TextView) convertView 
           .findViewById(R.id.lblMsgFromListMessage); 
         TextView lblTo = (TextView) convertView 
           .findViewById(R.id.lblMsgToListMessage); 
    
         lblFrom.setText(m.getFromName()); 
    
         // Spanned html = Html.fromHtml(m.getMessage()); 
         // String message = html.toString(); 
    
         String message = m.getMessage().toString(); 
         message = message.replaceAll("\\n", 
           System.getProperty("line.separator")); 
    
         try { 
          lblTo.setText(message); 
    
         } catch (Exception e) { 
          lblTo.setText(message); 
         } 
    
         return convertView; 
        } 
    } 
    

    TextView в макете:

    <TextView 
        android:id="@+id/lblMsgToListMessage" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginRight="50dp" 
        android:background="@drawable/chat_bg_msg_from" 
        android:paddingBottom="@dimen/five_dp" 
        android:paddingLeft="@dimen/ten_dp" 
        android:paddingRight="@dimen/ten_dp" 
        android:paddingTop="@dimen/five_dp" 
        android:textColor="@color/chat_title_gray" 
        android:textSize="@dimen/eighteen_sp" /> 
    

    Что-то не так с baseAdaptor? Где-то я увидел this link, он предложил SimpleAdapter проблема с настройкой html, но в моем случае это не помогает, так как я использую BaseAdapter.

    Я буду очень благодарен действительно за вашу помощь, как я потратил пять часов на новой линии выпуска :(

    +0

    try \ r with \ n as \ n \ r – raj

    ответ

    1

    Try:

    message = message.replaceAll("\\n", "&#10;");

    или (только если действительно есть двойные обратные косые на входе)

    message = message.replaceAll("\\n", "&#10;");


    Обновление: замены не работали, поскольку поисковая строка (\n) была удалена (экранирована) базой данных sql. This answer предоставил обходной путь, который включает в себя запуск unescape на строке до установки его на TextView.

    +0

    Не работает. Я отправил '\ n' в db.Мне нужно изменить на '\\ n' или' \\\ n' при сохранении в db из php? – Dev01

    +0

    Распечатайте строку сообщения перед вызовом replace, чтобы мы могли видеть, что происходит. –

    +0

    На стороне поиска команды, возможно, вам нужно использовать значения Unicode/HTML вместо символа прямой косой черты (http://unicode-table.com/en/#005C), но сначала посмотрите, как печатается входящая строка. –

     Смежные вопросы

    • Нет связанных вопросов^_^