如何在android中的列表视图上永久保存列表项 [英] How to save list items permanently on list view in android

查看:90
本文介绍了如何在android中的列表视图上永久保存列表项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个Android应用程序。在此应用程序中,通过警告对话框在SD卡上创建的文件夹将显示在列表视图中。当我单击返回另一个活动并返回列表活动时,列表视图上的文件夹将消失。请帮我解决这个列表视图的问题。



此活动的代码如下,



I am developing one android application. In this application, the folder created on sdcard through alert dialog will displayed on list view. When I click back to another activity and return back to the list activity the folders on list view will be disappeared. Please help me solving this problem of list view.

The code of this activity is given below,

public class FolderFragment extends DialogFragment {

View view;
Button createfolder_btn;
ListView folderlist;
String path;
ArrayList<String> arrayList;
ArrayAdapter<String> adapter;

 @Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, final Bundle savedInstanceState) {
//        return super.onCreateView(inflater, container, savedInstanceState);
    view = inflater.inflate(R.layout.fragment_folder, container, false);


    createfolder_btn = (Button) view.findViewById(R.id.btnfolder);
    folderlist = (ListView) view.findViewById(R.id.folder_listview);
     arrayList = new ArrayList<>();      

    createfolder_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onCreateDialog(savedInstanceState);
        }
    });

    adapter = new ArrayAdapter<>(getActivity(), R.layout.support_simple_spinner_dropdown_item, arrayList);
    folderlist.setAdapter(adapter);

    folderlist.setOnItemClickListener(new AdapterView.OnItemClickListener()          {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(getActivity(), FolderActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    });
   return view;

}

File file;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage("Create Folder");
    final EditText name_et = new EditText(getActivity());
    name_et.setHint("Enter Folder Name");
    builder.setView(name_et);
    builder.setPositiveButton("Create", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            String name = name_et.getText().toString();
            String extSdcard = Environment.getExternalStorageDirectory().toString();
            file = new File(extSdcard, name);
            file.mkdir();

            arrayList.add(file.getName());
            adapter.notifyDataSetChanged();

        }
    });

    builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent intent = new Intent(getActivity(), MainActivity.class);
            startActivity(intent);
        }
    });

   AlertDialog dialog = builder.create();
    dialog.show();
    return dialog;
}
}
}







The Log cat is shown below,




04-11 11:23:26.177 8627-8627/com.smsfilter E/AndroidRuntime: FATAL EXCEPTION: main
                                                             java.lang.NullPointerException
                                                                 at com.smsfilter.FolderFragment.onResume(FolderFragment.java:166)
                                                                 at android.app.Fragment.performResume(Fragment.java:1738)
                                                                 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
                                                                 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
                                                                 at android.app.BackStackRecord.run(BackStackRecord.java:682)
                                                                 at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
                                                                 at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
                                                                 at android.os.Handler.handleCallback(Handler.java:725)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                 at android.os.Looper.loop(Looper.java:137)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5041)
                                                                 at java.lang.reflect.Method.invokeNative(Native Method)
                                                                 at java.lang.reflect.Method.invoke(Method.java:511)
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
                                                                 at dalvik.system.NativeStart.main(Native Method)





我是什么尝试过:



我试过下面的列表视图代码



What I have tried:

I tried following code for list view

File file;
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage("Create Folder");
        final EditText name_et = new EditText(getActivity());
        name_et.setHint("Enter Folder Name");
        builder.setView(name_et);
        builder.setPositiveButton("Create", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                String name = name_et.getText().toString();
                String extSdcard = Environment.getExternalStorageDirectory().toString();
                file = new File(extSdcard, name);
                file.mkdir();

                arrayList.add(file.getName());
                adapter.notifyDataSetChanged();
                saveStringToPreferences(file.getName());

            }
        });

        builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(getActivity(), MainActivity.class);
                startActivity(intent);
            }
        });

       AlertDialog dialog = builder.create();
        dialog.show();
        return dialog;
    }

    private void saveStringToPreferences(String str){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("label", str);
        editor.apply();
    }

    @Override
    public void onResume() {
        super.onResume();
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        String previousText = preferences.getString("label", "");
        if(! TextUtils.isEmpty(previousText)){
            arrayList.add(file.getName());
            adapter.notifyDataSetChanged();

        }
    }
}





对于此代码,出现空指针异常at line



For this code the Null Pointer Exception occur at line

arrayList.add(file.getName());



此声明用<$写成c $ c> onResume()方法。

请帮我解决这个问题。


This statement written in onResume() method.
Please help me solving this problem.

推荐答案

1。运行(FragmentManager.java:441)
在android.os.Handler.handleCallback(Handler.java:725)
在android.os.Handler.dispatchMessage(Handler.java:92)
在android.os.Looper.loop(Looper.java:137)
在android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Nativ) e方法)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit
1.run(FragmentManager.java:441) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit


MethodAndArgsCaller .run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method)





我的尝试:



我尝试下面的列表视图代码



What I have tried:

I tried following code for list view

File file;
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage("Create Folder");
        final EditText name_et = new EditText(getActivity());
        name_et.setHint("Enter Folder Name");
        builder.setView(name_et);
        builder.setPositiveButton("Create", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                String name = name_et.getText().toString();
                String extSdcard = Environment.getExternalStorageDirectory().toString();
                file = new File(extSdcard, name);
                file.mkdir();

                arrayList.add(file.getName());
                adapter.notifyDataSetChanged();
                saveStringToPreferences(file.getName());

            }
        });

        builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(getActivity(), MainActivity.class);
                startActivity(intent);
            }
        });

       AlertDialog dialog = builder.create();
        dialog.show();
        return dialog;
    }

    private void saveStringToPreferences(String str){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("label", str);
        editor.apply();
    }

    @Override
    public void onResume() {
        super.onResume();
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        String previousText = preferences.getString("label", "");
        if(! TextUtils.isEmpty(previousText)){
            arrayList.add(file.getName());
            adapter.notifyDataSetChanged();

        }
    }
}





对于此代码,出现空指针异常at line



For this code the Null Pointer Exception occur at line

arrayList.add(file.getName());



此声明用<$写成c $ c> onResume()方法。

请帮我解决这个问题。


This statement written in onResume() method.
Please help me solving this problem.


你的文件 arrayList 变量为null,因此可能在活动状态之间丢失。请参阅活动| Android开发者 [ ^ ]如何处理各种状态变化。
Your file or arrayList variable is null, so may be lost between activity states. See Activity | Android Developers[^] for how to handle the various state changes.


这篇关于如何在android中的列表视图上永久保存列表项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆