0基础学习网站开发,专业做网站服务,深圳设计公司名字,《网站开发实例》pdf下载问题简介
在学习开发android过程中#xff0c;遇到了一个似乎很普遍的问题。当我们在初始化通过adapter将Listview和对应的Arraylist 数据data绑定时#xff0c;在后面的data更新后#xff0c;理论上使用adapter.notifyDataSetChanged()方法就可以让adapter自动更新Arrayli…问题简介
在学习开发android过程中遇到了一个似乎很普遍的问题。当我们在初始化通过adapter将Listview和对应的Arraylist 数据data绑定时在后面的data更新后理论上使用adapter.notifyDataSetChanged()方法就可以让adapter自动更新Arraylist列表但是实际上我们在对data更新之后并不能完成对视图中ListView的更新问bing问了一通也没问出啥解决方法最后还是查了半天才明白咋回事。。。
结论
解决方法① 可能是最有效的解决方法 将更新后的数据data和视图ListView与适配器adapter重新绑定 即调用绑定时的方法
datanew_data;//有数据更新
adapternew ArrayAdapterString(getActivity(),android.R.layout.simple_list_item_1,data);
listView.setAdapter(adapter);解决方法② 对于Arraylist类型的数据data只在原对象上修改不能重新赋值因为重新赋值实质上改变了data所指向的对象导致adapter的绑定出现问题,这可能也是notifyDataSetChanged()一个使用条件。
data.add(123);//数据更新
//不能datanew_data;
adapter.notifyDataSetChanged();下面可以不用看啦
代码分析
package com.example.test.ui.slideshow;import static java.lang.System.out;import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;import com.example.test.R;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;public class SlideshowFragment extends Fragment implements View.OnClickListener {//private Integer[] data{1,2,3,5,65,6,7,4,4,6,44,33,9,6,6,49491,85,5,6,2,25,51,25,20,2};private String[] ori_data{test_keyword1,test_keyword2,test_keyword3,test_keyword4,test_keyword1,test_keyword2,test_keyword3,test_keyword4,test_keyword1,test_keyword2,test_keyword3,test_keyword4,test_keyword1,test_keyword2,test_keyword3,test_keyword4};private ArrayListString data new ArrayList(Arrays.asList(ori_data));private ArrayAdapterString adapternull;private ListView listView;public View onCreateView(NonNull LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {super.onCreate(savedInstanceState);View view inflater.inflate(R.layout.fragment_email,container,false);listView(ListView) view.findViewById(R.id.list_email);adapternew ArrayAdapterString(getActivity(),android.R.layout.simple_list_item_1,data);listView.setAdapter(adapter);//单击每个item进行编辑listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {Overridepublic void onItemClick(AdapterView? parent, View view, int position, long id) {edit_item(position,adapter);}});listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {Overridepublic boolean onItemLongClick(AdapterView? parent, View view, int position, long id) {del_item(position,adapter);return true; // 返回true表示已经处理了长按事件不会触发单击事件}});view.findViewById(R.id.btn_add).setOnClickListener(this);view.findViewById(R.id.btn_sync).setOnClickListener(this);view.findViewById(R.id.btn_save).setOnClickListener(this);view.findViewById(R.id.btn_submit).setOnClickListener(this);return view;}Overridepublic void onClick(View v) {if(v.getId()R.id.btn_add){edit_item(data.size(), adapter);}else if(v.getId()R.id.btn_sync){//从服务器将数据同步到客户端dataload();adapternew ArrayAdapterString(getActivity(),android.R.layout.simple_list_item_1,data);listView.setAdapter(adapter);Toast.makeText(getActivity(),已成功加载,Toast.LENGTH_SHORT).show();}else if(v.getId()R.id.btn_save){save();Toast.makeText(getActivity(),已成功保存,Toast.LENGTH_SHORT).show();}else if(v.getId()R.id.btn_submit){}}private void save(){FileOutputStream outnull;BufferedWriter writernull;try{out getActivity().openFileOutput(test_datasave.txt, Context.MODE_PRIVATE);writernew BufferedWriter(new OutputStreamWriter(out));for (String str : data) {writer.write(str);writer.write(\n);}} catch (IOException e) {e.printStackTrace();}finally {try{if(writer!null){writer.close();}} catch (IOException e) {e.printStackTrace();}}}private ArrayListString load(){ArrayListString datanew ArrayList();FileInputStream in null;BufferedReader readernull;try{ingetActivity().openFileInput(test_datasave.txt);readernew BufferedReader(new InputStreamReader(in));String line;while((linereader.readLine())!null){data.add(line.toString());}} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(getActivity(),未找到文件,Toast.LENGTH_SHORT).show();} catch (IOException e) {e.printStackTrace();}finally {if(reader!null){try{reader.close();}catch(IOException e){e.printStackTrace();}}}return data;}//用于弹出dialog 并修改其中的某一项private void edit_item(int postition,ArrayAdapterString adapter){AlertDialog.Builder dialognew AlertDialog.Builder(getActivity());dialog.setTitle(编辑);EditText editTextnew EditText(getActivity());editText.setHint(请键入新的关键词);dialog.setView(editText);dialog.setPositiveButton(确认, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {final String inputTexteditText.getText().toString();if(data.size()postition){data.add(inputText);}else data.set(postition,inputText);adapter.notifyDataSetChanged();}});dialog.show();}//用于弹出一个dialog,用于确认删除其中的某一项private void del_item(int postition,ArrayAdapterString adapter){AlertDialog.Builder dialognew AlertDialog.Builder(getActivity());dialog.setTitle(删除);dialog.setMessage(确认删除这一项?);dialog.setPositiveButton(确认, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {data.remove(postition);adapter.notifyDataSetChanged();}});dialog.setNegativeButton(取消, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();}
}