Java 当键盘打开时按下后退按钮时,android中的TextView将恢复为以前的值
在我的Android项目中,我有一项活动是围绕群组消息传递展开的。消息包含在ListView中,每行都有一个like按钮。按下like按钮时,包含like总数的标签将增加一个(如果like未被选中,则减去like)。但是,当您在键盘打开时喜欢某条消息,然后按“上一步”按钮时,键盘将关闭,最近喜欢/未喜欢的消息将恢复为以前的“喜欢”计数。有什么我可以添加到TextView来阻止它这样做吗?或者我可以做些什么来Java 当键盘打开时按下后退按钮时,android中的TextView将恢复为以前的值,java,android,listview,back-button,Java,Android,Listview,Back Button,在我的Android项目中,我有一项活动是围绕群组消息传递展开的。消息包含在ListView中,每行都有一个like按钮。按下like按钮时,包含like总数的标签将增加一个(如果like未被选中,则减去like)。但是,当您在键盘打开时喜欢某条消息,然后按“上一步”按钮时,键盘将关闭,最近喜欢/未喜欢的消息将恢复为以前的“喜欢”计数。有什么我可以添加到TextView来阻止它这样做吗?或者我可以做些什么来onBackButtonPressed()?谢谢你的帮助 这是我更改likeCount文本
onBackButtonPressed()
?谢谢你的帮助
这是我更改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);
}
}
class-MessageInfo{
公共字符串messageID;
公共字符串消息内容;
公共字符串;
公共字符串senderID;
}
类视图持有者{
public TextView messageContent=null;
public TextView messageLikeCount=null;
公共按钮,如按钮=空;
公共字符串messageLikes=null;
公共字符串messageID=null;
公共字符串messageSendTime;
公共字符串senderID;
最终CognitoCachingCredentialsProvider证书提供者=新CognitoCachingCredentialsProvider(
getApplicationContext(),
keys.getIdPool(),//标识池ID
Regions.US\u EAST\u 1//地区
);
public AmazonDynamoDBClient dynamoDb=Region.getRegion(Regions.US\u EAST\u 1)
.createClient(
AmazonDynamoDBClient.class,
证书提供者,
新客户端配置()
);
视图保持架(视图行){
messageContent=(TextView)row.findViewById(R.id.messageText);
messageLikeCount=(TextView)row.findViewById(R.id.likeCountText);
likeButton=(按钮)row.findViewById(R.id.likeBtn);
设置字体(字体);
}
无效populateFrom(最终消息信息消息){
Log.e(“MESSAGE2”,“消息为”+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())){
比如按钮.setText(getString(R.string.icon\u heart\u closed));
比如按钮.setTextColor(getResources().getColor(R.color.colorHeart));
}
for(int i=0;i0){
MessageInfo tempMessage=messageArr.get(位置);
messageViewHolder.populateFrom(tempMessage);
}
返回(转换视图);
}
}
当用户用以下代码点击like按钮时,您可以隐藏键盘:
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);
}
}
您在点击like按钮时是否尝试关闭键盘?我认为不建议以编程方式关闭键盘。用户应在完成键入后关闭键盘。@hermt2您能将代码发布到更新like计数的位置吗?当我第一次按“上一步”按钮时,键盘自动关闭。是的,我将添加该代码段。我将其添加到代码中,现在只要我喜欢一条消息,键盘就会关闭,likeCount文本仍会恢复为以前的值。因此,看起来是键盘关闭导致文本字段值丢失。