如何删除列表视图中的项目(当列表由共享preferences填充 [英] How to delete list view items (when list is populated by SharedPreferences

查看:225
本文介绍了如何删除列表视图中的项目(当列表由共享preferences填充的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经成功地被共享preferences填充的列表视图。

 公共类FavouritesActivity延伸活动{ArrayAdapter<串GT;适配器;
清单<串GT;清单;
私人的ListView LV;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_my_favourites);    LV =(ListView控件)findViewById(R.id.My_Favourites);    共享preferences preferences = this.getShared preferences(我的preferences
                Context.MODE_PRIVATE);
    ArrayList的<串GT;表=新的ArrayList<串GT;();
    地图<字符串,> prefsMap = preferences.getAll();
    对于(Map.Entry的<弦乐,>进入:prefsMap.entrySet()){
        List.add(entry.getValue()的toString());
    }
    ArrayAdapter<串GT; arrayAdapter =新ArrayAdapter<串GT;(这一点,
            android.R.layout.simple_list_item_1,列表);    lv.setAdapter(arrayAdapter);

这个伟大的工程,但现在我想从列表中删除的项目。

  lv.setOnItemLongClickListener(新OnItemLongClickListener(){            @覆盖
            公共布尔onItemLongClick(适配器视图<>为arg0,ARG1查看,
                    INT位置,长ARG3){
                removeItemFromList(位置);
                返回true;
            }
        });
}保护无效removeItemFromList(INT位置){
        最终诠释deletePosition =位置;
        AlertDialog.Builder警报=新AlertDialog.Builder(
                FavouritesActivity.this);        alert.setTitle(删除);
        alert.setMessage(你确定要删除这个项目吗?);
        alert.setPositiveButton(是,新DialogInterface.OnClickListener(){            @覆盖
            公共无效的onClick(DialogInterface对话,诠释它){
                    List.remove(deletePosition);
                    adapter.notifyDataSetChanged();
                    adapter.notifyDataSetInvalidated();
            }
        });
        alert.setNegativeButton(CANCEL,新DialogInterface.OnClickListener(){            @覆盖
            公共无效的onClick(DialogInterface对话,诠释它){
                dialog.dismiss();
            }
        });
        alert.show();
    }

不幸的是这部分不起作用。该AlertView显示器,但选择确认崩溃的应用程序。

我有一种感觉,它是值得做的阵列适配器,但我在努力发现它。

任何人都可以点我在正确的方向?

崩溃日志:

  10月1日至10日:35:45.950:E / AndroidRuntime(1370):致命异常:主要
10月1日至10日:35:45.950:E / AndroidRuntime(1370):工艺:com.LifeSchematics.msg,PID:1370
10月1日至10日:35:45.950:E / AndroidRuntime(1370):显示java.lang.NullPointerException
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在com.LifeSchematics.msg.FavouritesActivity $ 2.onClick(FavouritesActivity.java:78)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在com.android.internal.app.AlertController $ ButtonHandler.handleMessage(AlertController.java:166)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在android.os.Handler.dispatchMessage(Handler.java:102)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在android.os.Looper.loop(Looper.java:136)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在android.app.ActivityThread.main(ActivityThread.java:5017)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在java.lang.reflect.Method.invokeNative(本机方法)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在java.lang.reflect.Method.invoke(Method.java:515)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10月1日至10日:35:45.950:E / AndroidRuntime(1370):在dalvik.system.NativeStart.main(本机方法)


解决方案

试试这个..

我猜你得到的 NPE 因为你无法初始化两个列表<串GT;清单; ArrayAdapter<串GT;适配器;

只需更换它。

 共享preferences preferences = this.getShared preferences(我的preferences,Context.MODE_PRIVATE);    //这里更正
    表=新的ArrayList<串GT;();
    地图<字符串,> prefsMap = preferences.getAll();
    对于(Map.Entry的<弦乐,>进入:prefsMap.entrySet()){
        List.add(entry.getValue()的toString());
    }    //这里更正
    arrayAdapter =新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_1,列表);    lv.setAdapter(arrayAdapter);

I have a list view successfully being populated by SharedPreferences.

public class FavouritesActivity extends Activity {

ArrayAdapter<String> adapter;
List<String> List;
private ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_favourites);

    lv = (ListView) findViewById(R.id.My_Favourites);

    SharedPreferences preferences = this.getSharedPreferences("MyPreferences",
                Context.MODE_PRIVATE);
    ArrayList<String> List = new ArrayList<String>();
    Map<String, ?> prefsMap = preferences.getAll();
    for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
        List.add(entry.getValue().toString());      
    } 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, List);

    lv.setAdapter(arrayAdapter);

This works great, but now I want to delete items from the list.

 lv.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
                removeItemFromList(position);
                return true;
            }
        });
}

protected void removeItemFromList(int position) {
        final int deletePosition = position;
        AlertDialog.Builder alert = new AlertDialog.Builder(
                FavouritesActivity.this);

        alert.setTitle("Delete");
        alert.setMessage("Are you sure you want delete this item?");
        alert.setPositiveButton("YES", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                    List.remove(deletePosition);
                    adapter.notifyDataSetChanged();
                    adapter.notifyDataSetInvalidated();
            }
        });
        alert.setNegativeButton("CANCEL",new DialogInterface.OnClickListener(){

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

Unfortunately this section does not work. The AlertView displays, but selecting confirm crashes the app.

I have a feeling it is something to do with the array adapter, but I'm struggling to spot it.

Can anyone point me in the right direction?

CRASH LOG:

01-10 10:35:45.950: E/AndroidRuntime(1370): FATAL EXCEPTION: main
01-10 10:35:45.950: E/AndroidRuntime(1370): Process: com.LifeSchematics.msg, PID: 1370
01-10 10:35:45.950: E/AndroidRuntime(1370): java.lang.NullPointerException
01-10 10:35:45.950: E/AndroidRuntime(1370):     at com.LifeSchematics.msg.FavouritesActivity$2.onClick(FavouritesActivity.java:78)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at android.os.Handler.dispatchMessage(Handler.java:102)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at android.os.Looper.loop(Looper.java:136)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at android.app.ActivityThread.main(ActivityThread.java:5017)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at java.lang.reflect.Method.invokeNative(Native Method)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at java.lang.reflect.Method.invoke(Method.java:515)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-10 10:35:45.950: E/AndroidRuntime(1370):     at dalvik.system.NativeStart.main(Native Method)

解决方案

Try this..

I guess you getting NPE because your not initialize both List<String> List; and ArrayAdapter<String> adapter;

Just replace it..

SharedPreferences preferences = this.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);

    //correction here
    List = new ArrayList<String>();         
    Map<String, ?> prefsMap = preferences.getAll();
    for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
        List.add(entry.getValue().toString());      
    } 

    // correction here
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, List);     

    lv.setAdapter(arrayAdapter);

这篇关于如何删除列表视图中的项目(当列表由共享preferences填充的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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