【问题标题】:How to get row item infomation when pressing long in listView in Android?在Android的listView中长按时如何获取行项信息?
【发布时间】:2014-11-13 11:28:29
【问题描述】:

当用户长按该行时,我想通过删除其在 SharedPreferences 中保存的值来删除该行。因此,我需要将行的文本值作为 ID 访问。我在 onCreateView() 中为我的列表视图设置了一个 onItemLongClick() 方法,但出现错误。

 listView.setLongClickable(true);
 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

         SharedPreferences prefs = getActivity().getSharedPreferences("records",getActivity().MODE_PRIVATE);
         SharedPreferences.Editor editor = prefs.edit();

         public boolean onItemLongClick(AdapterView<?> arg0, View v,int index, long arg3) {

            TextView rowText = (TextView)v.findViewById(R.id.cName);
            CharSequence name = rowText.getText();

             if(name.equals("A")){

                 editor.remove("aChecked");

             }else if(name.equals("B")){

                 editor.remove("bChecked");

            }
         Toast.makeText(getActivity(),"Item removed", Toast.LENGTH_LONG).show();
                return true;
            }
}); 

记录结果:

11-13 11:02:23.201: E/AndroidRuntime(1785): FATAL EXCEPTION: main
11-13 11:02:23.201: E/AndroidRuntime(1785): java.lang.NullPointerException
11-13 11:02:23.201: E/AndroidRuntime(1785):     at com.example.application.FavorilerFragment$1.onItemLongClick(FavorilerFragment.java:68)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:2621)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:564)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.view.View.showContextMenu(View.java:3581)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.view.View.performLongClick(View.java:3550)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.widget.TextView.performLongClick(TextView.java:9221)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.view.View$CheckForLongPress.run(View.java:14083)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.os.Handler.handleCallback(Handler.java:605)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.os.Looper.loop(Looper.java:137)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at android.app.ActivityThread.main(ActivityThread.java:4424)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at java.lang.reflect.Method.invokeNative(Native Method)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at java.lang.reflect.Method.invoke(Method.java:511)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-13 11:02:23.201: E/AndroidRuntime(1785):     at dalvik.system.NativeStart.main(Native Method)
11-13 11:02:23.721: I/dalvikvm(1785): threadid=3: reacting to signal 3
11-13 11:02:23.721: I/dalvikvm(1785): Wrote stack traces to '/data/anr/traces.txt'

【问题讨论】:

  • 你不能从 v 引用初始化 TextView。
  • 使用索引从 ListView 数据持有者列表中获取 cName。
  • 对不起,我无法理解 Listview 数据持有者的意思

标签: android listview android-listview onlongclicklistener onitemlongclicklistener


【解决方案1】:

尝试从 ListView 项目数据持有者获取数据:

ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
HashMap<String,String> row1= new HashMap<String, String>();
row1.put("cName","A");
list.add(row1);

public boolean onItemLongClick(AdapterView<?> arg0, View v,int index, long arg3) {
   CharSequence name = list.get(index).get("cName");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 2018-01-28
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多