在Android中的BaseAdapter中的弹出菜单中重命名ListView项后更新ListView

在Android中的BaseAdapter中的弹出菜单中重命名ListView项后更新ListView,android,listview,android-listview,android-arrayadapter,popupmenu,Android,Listview,Android Listview,Android Arrayadapter,Popupmenu,我有一个列表视图,它有一个自定义适配器和一个弹出菜单,提供列表项的一些选项,包括重命名选项。重命名列表项后,我想刷新列表视图,并显示重命名的列表项 以下是我的代码。 文件碎片 public class DocumentsFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

我有一个
列表视图
,它有一个自定义适配器和一个
弹出菜单
,提供列表项的一些选项,包括重命名选项。重命名列表项后,我想刷新
列表视图
,并显示重命名的列表项
以下是我的代码。

文件碎片

public class DocumentsFragment extends Fragment{
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_my_doc, container, false);       

        ArrayList<FolderBean> folderList = new ArrayList<FolderBean>();
        fileNames = fileFunctions.listFileNames(Environment.getExternalStorageDirectory() + "/Documents/Files");

        for(int i = 0; i < fileNames.length; i++){
            folderList.add(new FolderBean(fileNames[i], "text"));
        }

        listView = (ListView) rootView.findViewById(R.id.myDocList);
        CustomFolderListAdapter cAdapter = new CustomFolderListAdapter(getActivity(), folderList);
        listView.setAdapter(cAdapter);
        listView.setOnItemClickListener(this);          
        listView.setOnItemLongClickListener(this);

        return rootView;
    }
}
公共类文档片段扩展片段{
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.fragment\u my\u doc,container,false);
ArrayList folderList=新建ArrayList();
fileNames=fileFunctions.listFileNames(Environment.getExternalStorageDirectory()+“/Documents/Files”);
对于(int i=0;i
CustomFolderListAdapter

public class CustomFolderListAdapter extends BaseAdapter {

    private ArrayList<FolderBean> folderList;
    private Context context;
    private FolderBean folderBean;

    public CustomFolderListAdapter(Context applicationContext, ArrayList<FolderBean> questionForSliderMenu) {   
        super();
        this.context = applicationContext;
        this.folderList = questionForSliderMenu;    
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        folderBean = new FolderBean();
        folderBean = folderList.get(position);

        if (convertView == null) {  
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.folder_popup_item, null);
        }

        TextView fileName = (TextView) convertView.findViewById(R.id.file_name);
        ImageView fileImage = (ImageView) convertView.findViewById(R.id.file_icon);
        ImageView fileOptions = (ImageView) convertView.findViewById(R.id.file_options_icon);

        fileOptions.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()) {
                    case R.id.file_options_icon:
                         PopupMenu popup = new PopupMenu(context, view);
                         popup.getMenuInflater().inflate(R.menu.clipboard_popup,  popup.getMenu());
                         popup.show();
                         popup.setOnMenuItemClickListener(new  PopupMenu.OnMenuItemClickListener() {
                             @Override
                             public boolean onMenuItemClick(MenuItem item) {

                                 switch (item.getItemId()) {
                                 case R.id.file_rename_menu:


                                    final String filename = folderList.get(position).getName();
                                    final String ext =   filename.substring(filename.indexOf(".") + 1);

                                    AlertDialog.Builder builderR = new AlertDialog.Builder(context);
                                    builderR.setTitle("Rename file");
                                    builderR.setCancelable(true);

                                    final EditText input = new EditText(context);
                                    input.setText(filename.substring(0, filename.indexOf(".")));
                                    builderR.setView(input);

                                    builderR.setPositiveButton("Rename", new DialogInterface.OnClickListener() {

                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            if(input.getText().toString().equals("")){
                                                UtilClass.getInstance().displayToast(context, "Please enter a name for the file", Toast.LENGTH_LONG);
                                            }
                                            else{
                                                File from = new File(Environment.getExternalStorageDirectory() + "/Documents/Files/" + filename);

                                                File to = new File(Environment.getExternalStorageDirectory() + "/Documents/Files/" + input.getText().toString() + "." + ext);

                                                boolean renamed = from.renameTo(to);

                                                if(renamed){
                                                    System.out.println("The position is " + position);
                                                    /** I have to do it here, don't I? How should I update the listview with the renamed file name?     **/                                 
                                                    notifyDataSetChanged();
                                                }                                               
                                            }
                                        }                                       
                                    });

                                    builderR.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.dismiss();
                                        }
                                    });

                                    AlertDialog alertR = builderR.create();
                                    alertR.show();

                                    break;
                                 }
                             }
                         });
                }
            }
        }

    }
}
公共类CustomFolderListAdapter扩展了BaseAdapter{
私有ArrayList文件夹列表;
私人语境;
私人菜豆;
公共CustomFolderListAdapter(上下文应用程序上下文,ArrayList questionForSliderMenu){
超级();
this.context=applicationContext;
this.folderList=questionForSliderMenu;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
folderBean=新folderBean();
folderBean=folderList.get(位置);
如果(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.folder\u popup\u项目,空);
}
TextView文件名=(TextView)convertView.findViewById(R.id.file\u name);
ImageView文件image=(ImageView)convertView.findViewById(R.id.file_图标);
ImageView文件选项=(ImageView)convertView.findViewById(R.id.file\u选项\u图标);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
开关(view.getId()){
案例R.id.file\u选项\u图标:
PopupMenu popup=新的PopupMenu(上下文、视图);
popup.getMenuInflater().充气(R.menu.clipboard_popup,popup.getMenu());
popup.show();
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(菜单项){
开关(item.getItemId()){
case R.id.file_rename_菜单:
最终字符串文件名=folderList.get(position).getName();
最终字符串ext=filename.substring(filename.indexOf(“.”+1);
AlertDialog.Builder Builder=新建AlertDialog.Builder(上下文);
setTitle(“重命名文件”);
builderR.setCancelable(true);
最终编辑文本输入=新编辑文本(上下文);
input.setText(filename.substring(0,filename.indexOf(“.”));
builderR.setView(输入);
builderR.setPositiveButton(“重命名”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
if(input.getText().toString().equals(“”){
UtilClass.getInstance().displayToast(上下文,“请输入文件名”,Toast.LENGTH\u LONG);
}
否则{
File from=新文件(Environment.getExternalStorageDirectory()+“/Documents/Files/”+文件名);
File to=新文件(Environment.getExternalStorageDirectory()+”/Documents/Files/“+input.getText().toString()+”+ext);
布尔重命名=from.renameTo(to);
如果(重命名){
System.out.println(“位置为”+位置);
/**我必须在这里完成,不是吗?我应该如何用重命名的文件名更新listview?**/
notifyDataSetChanged();
}                                               
}
}                                       
});
builderR.setNegativeButton(“取消”,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
fileNames = fileFunctions.listFileNames(Environment.getExternalStorageDirectory() + "/Documents/Files");

    for(int i = 0; i < fileNames.length; i++){
        folderList.add(new FolderBean(fileNames[i], "text"));
    }