2017-01-30 20 views
0

У меня есть активность в моем проекте Android, который вращается вокруг группового сообщения. Сообщения содержатся в ListView, и каждая строка имеет подобную кнопку. Когда нажата подобная кнопка, метка с общим количеством симпатий увеличивается на единицу (и вычитается, как если бы она была отброшена). Однако, когда вам нравится сообщение, когда клавиатура открыта, а затем нажмите кнопку «Назад», клавиатура закроется, а последнее понравившееся/неактивное сообщение вернется к предыдущему, как счет. Есть ли что-нибудь, что я могу добавить в TextView, чтобы это не делалось? Или что-то я могу сделать с onBackButtonPressed()? Спасибо за вашу помощь.TextView в android возвращается к предыдущему значению при нажатии кнопки «Назад» при открытой клавиатуре

Это код, где я могу изменить текст likeCount:

class MessageInfo { 
    public String messageID; 
    public String messageContent; 
    public String messageLikes; 
    public String senderID; 
} 

class ViewHolder { 

    public TextView messageContent = null; 
    public TextView messageLikeCount = null; 
    public Button likeButton = null; 
    public String messageLikes = null; 
    public String messageID = null; 


    public String messageSendTime; 
    public String senderID; 

    final CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
      getApplicationContext(), 
      keys.getIdPool(), // Identity Pool ID 
      Regions.US_EAST_1 // Region 
    ); 

    public AmazonDynamoDBClient dynamoDb = Region.getRegion(Regions.US_EAST_1) 
      .createClient(
        AmazonDynamoDBClient.class, 
        credentialsProvider, 
        new ClientConfiguration() 
      ); 

    ViewHolder(View row) { 
     messageContent = (TextView)row.findViewById(R.id.messageText); 
     messageLikeCount = (TextView)row.findViewById(R.id.likeCountText); 
     likeButton = (Button)row.findViewById(R.id.likeBtn); 

     likeButton.setTypeface(fontAwesome); 
    } 

    void populateFrom(final MessageInfo message) { 

     Log.e("MESSAGE2", "The message is " + message.messageContent); 

     messageContent.setText(message.messageContent); 
     messageID = message.messageID; 
     messageLikes = message.messageLikes; 

     int likeCount = 0; 

     if (messageLikes == null) { 
      messageLikes = ""; 
     } 

     Log.e("MessageLikes", "Mesage likes is " + messageLikes); 

     if (messageLikes.contains(userInfo.getProfId())) { 
      likeButton.setText(getString(R.string.icon_heart_closed)); 
      likeButton.setTextColor(getResources().getColor(R.color.colorHeart)); 
     } 

     for (int i = 0; i < messageLikes.length(); i++) { 

      if (messageLikes.charAt(i) == ',') { 

       likeCount += 1; 

      } 

     } // end for loop to get number of likes 


     messageLikeCount.setText(String.valueOf(likeCount)); 




     likeButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Log.e("Clicked", "Like button clicked"); 

       likeButton.setText(getString(R.string.icon_heart_closed)); 
       likeButton.setTextColor(getResources().getColor(R.color.colorHeart)); 

       int newLikeCount = Integer.parseInt(messageLikeCount.getText().toString()) + 1; 
       messageLikeCount.setText(String.valueOf(newLikeCount)); 

      } 
     }); 

    } 

} 

class MessageAdapter extends ArrayAdapter<MessageInfo> { 
    MessageAdapter() { 
     super(SingleGroupActivity.this, android.R.layout.simple_list_item_1, messageArr); 
    } 

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

     Log.e("MESSAGE", "The message is " + messageArr.get(position).messageContent); 

     if (convertView == null) { 
      LayoutInflater inflater = getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.message_row_layout, null); 

      messageViewHolder = new ViewHolder(convertView); 
      convertView.setTag(messageViewHolder); 
     } else { 

      messageViewHolder = (ViewHolder)convertView.getTag(); 
     } 

     if (messageArr.size() > 0) { 
      MessageInfo tempMessage = messageArr.get(position); 
      messageViewHolder.populateFrom(tempMessage); 
     } 


     return (convertView); 
    } 

} 
+1

Вы пытались закрыть клавиатуру при касании на подобной кнопке? – Mohamed

+0

Я не думаю, что рекомендуется программно закрыть клавиатуру. Пользователь должен закрыть клавиатуру, когда они будут печататься. –

+0

@ hermt2 можете ли вы разместить код, в котором вы обновляете счет? –

ответ

0

Вы можете скрыть клавиатуру, когда пользователь нажмите на кнопку с этим кодом, как:

public static void hideKeypad(Activity context) { 
    View view = context.getCurrentFocus(); 
    if (view != null) { 
     InputMethodManager imm = 
     (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
    } 
} 
+0

Я добавил это в код, и теперь, как только мне нравится сообщение, клавиатура закрывается, и текст likeCount по-прежнему возвращается к предыдущему значению. Таким образом, похоже, что это закрытие клавиатуры, которое отбрасывает значение текстового поля. – hermt2

+0

Хорошо, вы можете показать полный код, пожалуйста? – Mohamed

+0

Да, я добавил весь код для своего списка – hermt2