在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"));
}