【已解决】 Listview动态添加item后如何实现item的永久保存
模拟微信发信息的界面,设置一个发送按钮.点击按钮后发送一条信息,但是退出聊天界面后再重新进去,所有item都消失了,如何实现保存这些item
1.Adapter
public class MsgTalkAdapter extends BaseAdapter {
private LinkedList<MessageEntity>mData;
private Context context;
public MsgTalkAdapter(LinkedList<MessageEntity> mData, Context context){
this.mData=mData;
this.context=context;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
if (convertView==null){
convertView= LayoutInflater.from(context).inflate(R.layout.msg_item_right,parent,false);
holder= new ViewHolder();
holder.message=(TextView) convertView.findViewById(R.id.right_msg);
convertView.setTag(holder);//将holder存储到convertView中
}else {
holder=(ViewHolder) convertView.getTag();
}
holder.message.setText(mData.get(position).getMessage());
return convertView;
}
static class ViewHolder{
TextView message;
}
public void add(MessageEntity data){
if (mData==null){
mData=new LinkedList<>();
}
mData.add(data);
notifyDataSetChanged();
}
}
2.MessageEntity(目前只用了getMessage这个方法)
public class MessageEntity {
private String name;
private String message;
private String date;
private boolean isComeMsg=true;
private boolean GetMsgType=true;
public boolean GetMsgType() {
return GetMsgType;
}
public void GetMsgType(boolean getMsgType) {
GetMsgType = getMsgType;
}
public MessageEntity() {
}
public MessageEntity(String message) {
this.message = message;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public boolean isComeMsg() {
return isComeMsg;
}
public void setComeMsg(boolean comeMsg) {
isComeMsg = comeMsg;
}
}
3.主类
public class fragmentActivity extends AppCompatActivity {
private static final String TAG = "fragmentActivity";
private ChoiceFragment choiceFragment;
private SendMsgFragment sendMsgFragment;
private ImageButton add;
private ImageView backImageview;
private EditText editTextmessage;
private TextView textSendmessage;
private TextView nameTextview;
private ListView messageListview;
private TextView userName;
private List<MessageEntity>mData=null;
private ArrayAdapter arrayAdapter;
private Button send_btn;
private String content;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_container);
findFragment();
initview();
setName();
ChangeFragment();
MessageTalkView();
}
private void MessageTalkView() {
MsgTalkAdapter msgTalkAdapter = new MsgTalkAdapter((LinkedList<MessageEntity>) mData,fragmentActivity.this);
send_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
content = editTextmessage.getText().toString();
Log.d(TAG,"CONTENT----"+content);
switch (v.getId()){
case R.id.send_btn:
msgTalkAdapter.add(new MessageEntity(content));
break;
}
// mData=new LinkedList<MessageEntity>();
// mData.add(new MessageEntity(content));
//SimpleAdapter simpleAdapter = new SimpleAdapter(fragmentActivity.this,getdata(),R.layout.msg_item_right,new String[]{"content"},new int[]{R.id.right_msg});
// messageListview.setAdapter(simpleAdapter);
// simpleAdapter.notifyDataSetChanged();
messageListview.setAdapter(msgTalkAdapter);
msgTalkAdapter.notifyDataSetChanged();
editTextmessage.setText("");
}
});
}
private List<Map<String,Object>> getdata() {
Log.d(TAG,"CONTENT---"+content);
List<Map<String,Object>>list= new ArrayList<>();
Map map = new HashMap();
map.put("content",content);
list.add(map);
return list;
}
private void setName() {
Intent intent =getIntent();
String name = intent.getStringExtra("username");
Log.d(TAG,"NAME-----"+name);
userName.setText(name);
}
void initview() {
userName = findViewById(R.id.user_name);
editTextmessage =(EditText)findViewById(R.id.msg_edit_text);
backImageview =(ImageView) findViewById(R.id.back_btn);
messageListview=(ListView)findViewById(R.id.message_list);
send_btn = findViewById(R.id.send_btn);
add = this.findViewById(R.id.add_view_action);
}
private void ChangeFragment() {
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm =getSupportFragmentManager();
FragmentTransaction ft= fm.beginTransaction();
ft.add(R.id.action_view,choiceFragment);
ft.show(choiceFragment);
ft.addToBackStack(null);
ft.commit();
}
});
}
private void findFragment() {
choiceFragment = new ChoiceFragment();
sendMsgFragment = new SendMsgFragment();
}
}
保存数据方式很多。
比如通过网络服务器,你卸载了app数据还能保留,只要你下一次安装,再通过接口访问就行了。
还有就是保存到手机本地中,最简单方式sp保存。
其次你可以用数据库,sqlite。
还有文件方式。
一看你代码就是是个萌新。那就建议你用room来做吧。
百度搜索:Android room使用
你要做的只是把数据持久化,把数据保存起来,而不是把 item 视图保存起来 这部分的知识在网站的喜马拉雅项目中有讲到的 https://www.sunofbeach.net/c/1444257794952908801