如何在ListView上长按时传递变量?

2023-12-12

我会有列表视图和里面的很多项目。我希望用户可以长按项目并将其设置为收藏夹。为此,我需要长按此菜单获取数据库 ID。

我有以下代码

@Override
public void onCreateContextMenu(ContextMenu menu, 
                              View v, 
                              ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

menu.setHeaderTitle("Favorite");
menu.add(0, REMOVE_TODO, Menu.NONE, R.string.favorit_add);
}

它工作得很好...但我想做的是获取所选项目的文本和数据库 ID。

因此,我想写“Favorite:Item1”而不是“Favorite”。

如果有人能提供帮助,我将不胜感激。

这是我的适配器的代码...我实际上使用了示例的适配器。

    package com.TVSpored;

import android.content.Context;
import java.util.*;
import android.view.*;
import android.widget.*;

public class ToDoItemAdapter extends ArrayAdapter<ToDoItem> {

  int resource;

  public ToDoItemAdapter(Context _context, 
                             int _resource, 
                             List<ToDoItem> _items) {
    super(_context, _resource, _items);
    resource = _resource;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    LinearLayout todoView;

    ToDoItem item = getItem(position);

    String taskString = item.getTask();
    String icon_name = item.getCreated();
    int fav = item.getFavorite();

    if (convertView == null) {
      todoView = new LinearLayout(getContext());
      String inflater = Context.LAYOUT_INFLATER_SERVICE;
      LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater); 
      vi.inflate(resource, todoView, true);
    } else {
      todoView = (LinearLayout) convertView;
    }

    ImageView favView = (ImageView)todoView.findViewById(R.id.rowImgFav);
    ImageView channelView = (ImageView)todoView.findViewById(R.id.rowImg);
    TextView channelName = (TextView)todoView.findViewById(R.id.row);

    //dateView.setText(dateString);

    channelView.setImageResource(getContext().getResources().getIdentifier("com.TVSpored:drawable/channels_"+icon_name , null, null));

    channelName.setText(taskString);

    if(fav == 0)
    {
        favView.setImageResource(R.drawable.sys_srcek_disabled);
    }
    else
    {
        favView.setImageResource(R.drawable.sys_srcek);
    }
    return todoView;
  }
  }

进一步我的项目

package com.TVSpored;

import java.text.SimpleDateFormat;

public class ToDoItem {

  String task;
  String created;
  Integer fav;
  Integer id;

  public String getTask() {
    return task;
  }

  public String getCreated() {
    return created;    
  }

  public Integer getFavorite()
  {
      return fav;
  }

  public Integer getID()
  {
      return id;
  }

  public ToDoItem(String _task, String _created, int _fav, int _id) {
    task = _task;
    created = _created;
    fav = _fav;
    id = _id;
  }

  }

这是主活动类中的代码

 @Override
 public void onCreateContextMenu(ContextMenu menu, 
                              View v, 
                              ContextMenu.ContextMenuInfo menuInfo) {
 super.onCreateContextMenu(menu, v, menuInfo);


 menu.setHeaderTitle("Urejanje kanala");
 menu.add(0, REMOVE_TODO, Menu.NONE, R.string.favorit_add); 
 // static final private int REMOVE_TODO = Menu.FIRST + 1; // defined ad the begining
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
 super.onOptionsItemSelected(item);

 AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
 int arrayAdapterPosition = menuInfo.position;

 ToDoItem todoItem = (ToDoItem)aa.getItem(arrayAdapterPosition);
 String task = todoItem.getTask();
 int id = todoItem.getID();

 int index = myListView.getSelectedItemPosition();
 aa.getItemId(index);

 changeFavorite(id);
 return true;
 }

这是 updateArray 函数(在更改时调用)

private void updateArray() {
  toDoListCursor.requery();

  todoItems.clear();
  int j = 0;
  if (toDoListCursor.moveToFirst())
    do 
    { 
      String task =            toDoListCursor.getString(toDoListCursor.getColumnIndex(ToDoDBAdapter.KEY_NAME));
      String created = toDoListCursor.getString(toDoListCursor.getColumnIndex(ToDoDBAdapter.KEY_EPG_NAME));
      int fav = toDoListCursor.getInt(toDoListCursor.getColumnIndex(ToDoDBAdapter.KEY_EPG_NAME));
      int id = toDoListCursor.getInt(toDoListCursor.getColumnIndex(ToDoDBAdapter.KEY_ID));

      ToDoItem newItem = new ToDoItem(task, created, fav, id);
      todoItems.add(0, newItem);
      j++;
    } 
    while(toDoListCursor.moveToNext());

  aa.notifyDataSetChanged();
}

和填充函数...

private void populateTChannels() {
// Get all the todo list items from the database.
toDoListCursor = toDoDBAdapter. getAllToDoItemsCursor();
if((toDoListCursor.getCount() == 0) || !toDoListCursor.moveToFirst())
{
    toDoDBAdapter.populateDB();
}

if(toDoDBAdapter.ChannelsArray.length > toDoListCursor.getCount())
{
    toDoDBAdapter.populateDBWhitCheck();
}
toDoListCursor = toDoDBAdapter. getAllToDoItemsCursor();
startManagingCursor(toDoListCursor);

// Update the array.
updateArray();
}

The ContextMenu.ContextMenuInfo您获得的信息包含有关单击列表中的哪个项目的信息。您也许可以使用它来获取您需要的信息。

Update:

有点像 dziobas 在他的回答中提到的那样,您可以执行类似的操作来了解所选项目在适配器中的位置:

AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
long arrayAdapterPosition = menuInfo.position;

现在您知道了位置,并且可以从您的ArrayAdapter。如果你有这个ArrayAdapter实例存储在成员变量中(在本例中我将其命名为 myArrayAdapter),然后您可以继续使用以下命令获取该项目ArrayAdapter.getItem(int position):

ToDoItem todoItem = (ToDoItem)myArrayAdapter.getItem(arrayAdapterPosition);
String task = todoItem.getTask();
int id = todoItem.getId();

您现在可以继续设置菜单标题标题,如下所示:

menu.setHeaderTitle("Favorite: " + task + Integer.toString(id));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在ListView上长按时传递变量? 的相关文章

  • 如何在Android上获取当前播放曲目的路径[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想编写一个应用程序将当前播放的音乐流式传输到另一台设备 两个设备之间的连接确实有效 我还可以通过 wifi 传输一些字符串 但在获取
  • 服务如何在后台运行 - Android

    今天的采访中我被问到了这个问题 什么是服务 我对此的回答是 Service 是 Android 的基本组件 它没有 UI 并且在后台运行 Service 是否在主线程上运行 不 那么它是如何在后台运行的呢 我心里一片空白 有人可以解释一下如
  • 需要对某些片段禁用 CollapsingToolbarLayout 的展开

    我有一个AppCompatActivity控制替换许多片段 这是我的布局 活动 main xml
  • 与通用地图相比,MapView 的分辨率较差

    我刚刚收到 HTC Desire 进行测试 我注意到 残留在小于整个屏幕的框架中的地图视图不如通用地图应用程序那么清晰 有什么办法解决这个问题吗 您应该使用 API 级别 4 或更高级别编译应用程序 然后在 AndroidManifest
  • 不使用eclipse安装Android模拟器

    如何在没有eclipse的电脑上安装android模拟器 android模拟器无需安装eclipse 只需下载 android sdk 并安装即可 安装android SDK之前必须先安装JDK 完成后安装成功 您将获得两个应用程序 SDK
  • 将项目添加到 android 框架的设置中

    我正在 android 框架中工作 我想向 android 操作系统中的现有设置添加一个项目 您能告诉我如何执行此操作吗 首先阅读有关偏好活动 http developer android com reference android pre
  • 构建应用程序时出现 BufferOverflowException

    每次我想运行我的 Android 应用程序时 我都会收到错误 2013 11 02 13 05 36 Dex Loader Unable to execute dex java nio BufferOverflowException Che
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • 在 Android 中使用 AES 加密的最佳实践是什么?

    我为什么问这个问题 我知道人们对 AES 加密存在很多疑问 即使对于 Android 也是如此 如果您在网络上搜索 会发现很多代码片段 但在每个页面上 在每个 Stack Overflow 问题中 我都发现了另一个具有重大差异的实现 所以我
  • 检测设备方向

    我需要检测 Android 设备方向变化 而无需手动处理传感器数据 同时保持活动方向坚持某个方向 onConfigurationChange不会起作用 因为会让我的活动不旋转 通过使用传感器数据来检测方向变化 我认为这是轮子的发明 因为 A
  • 本地管理的广播接收器泄漏?

    当应用程序被系统杀死时 本地 即使用 LocalBroadcastManager 管理 BroadcastReceiver 是否有可能泄漏 我需要它的具体用例是我想在活动的 onCreate onDestroy 中注册 注销 Broadca
  • Android 5 Lollipop 阴影方向或 y 偏移

    是否有可能改变 Y 偏移的阴影方向 现在我有以下布局
  • Android 两个 Activity 之间的共享元素转换不起作用

    在我的应用程序中 我尝试使用新引入的活动之间共享的元素 如果共享元素具有固定位置 例如 android layout gravity top 但是当视图被锚定时问题就出现了 我的第一个活动如下所示
  • 活动中列表视图中的粘滞行

    我的列表视图中只有一行应该是粘性的 而不是粘性标题中带有字母的部分或部分 我真的很感激任何关于列表视图在活动中粘性一行而不是片段的帮助 我该怎么做 我真的很感谢任何帮助 提前致谢 使用如下代码 class MyAsyncTask exten
  • Android:选择 EditField 上焦点上的所有文本

    我试图让 Android 在获得焦点时选择 EditText 字段中的所有文本 我在布局中使用此属性 在两个字段上 android selectAllOnFocus true 我不确定这是否相关 但为了将光标移动到第一个可编辑字段 前面 还
  • 致命异常:GoogleApiHandler

    在我的项目中 我使用货币化服务 Vungle AppLovin 当我尝试加载广告时 出现此异常 E AndroidRuntime 致命异常 GoogleApiHandler 进程 kz ikar PID 3673 java lang NoS
  • Android:我的应用程序太大并给出“无法执行 dex:方法 ID 不在 [0, 0xffff]: 65536”?

    我正在尝试将我的应用程序与 Box Dropbox 和 Google Drive 集成 所有这 3 项服务都需要许多第 3 方 jar 此外 我的应用程序已经需要一些第三方 jar 现在 当我尝试从 Eclipse 运行我的应用程序时 出现
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下
  • android.view.WindowLeaked - 使用对话框和新意图时

    我已经尝试了 stackoverflow 上提供的所有可能的解决方案 但我仍然在 logcat 中遇到此错误 活动 com xyz MainActivity 泄露了最初在此处添加的窗口 com android internal policy
  • FCM(Firebase Cloud Messaging)如何发送到所有手机?

    我创建了一个小型应用程序 能够从 FCM 控制台接收推送通知 我现在想做的是向所有使用 API 安装应用程序的 Android 手机发送推送通知 这就是我完全迷失的地方 有没有办法在不收集所有注册ID的情况下将其发送到所有手机 这是否仅适用

随机推荐

  • javascript匿名函数[重复]

    这个问题在这里已经有答案了 可能的重复 这个 JavaScript 片段是什么意思 我想知道为什么函数末尾有双括号 这是匿名函数的简单说明 function 功能 那些是做什么用的 这声明了一个匿名函数并在同一行立即调用它 将其视为 foo
  • 为单个图像创建多个蒙版

    我正在尝试创建以下场景 并且我愿意使用 jquery css 和 html 的任意组合 不过我现在想远离 HTML 5 但我愿意看看它如果这是唯一的解决方案 我想要一张大图像 只能在蒙版所在的位置可见 我尝试了多种技术 但都不起作用 任何建
  • 解析输出并计算字符串出现的次数[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在运行一些代码 由于复杂性和篇幅 我想也许可以使用一些代码来让我的生活变得轻松 所以代码运行时使用 gt commandA output results are popping
  • Jenkins:凭证中私钥的正确格式是什么

    我正在 Windows Server 2016 上运行的 Jenkins 2 152 中创建一个作业 该作业需要从 bitbucket org 上托管的 git 存储库中提取 我通过 git bash 测试了 ssh 密钥 所以我知道它有效
  • 将 C# winforms 按钮处理为击键?

    I want to make a button on that when pressed the key combination Ctrl is pressed and another where Ctrl is pressed How c
  • 有没有办法让 Behat 不会因 PHP 通知错误而失败?

    我知道最好的做法是定义所有变量并在评估之前检查数组索引 但是 我正在尝试对在一些尚未以这种方式编码的遗留代码之上开发的新功能运行一些测试 Behat 失败并显示以下消息 Scenario Add a new resource feature
  • var fn = function() {...} 和 var fn = function foo() {...} 有不同吗?

    当您将函数分配给变量时 如果使用命名函数而不是匿名函数 这有什么区别吗 以下生成错误 foo 未定义 var fn function foo foo 谁能澄清这里发生了什么事吗 你正在创建一个命名函数表达式 IE 中除外 该名称仅在函数内部
  • JSP - 在 JSP 页面之间传递参数

    如何使用纯 Java 代码在 JSP 页面之间传递参数 IE 我不想使用如下代码
  • 如何在Polars中按数据类型选择列?

    在 pandas 中我们有pandas DataFrame select dtypes根据选择某些列的方法dtype 在 Polars 中是否有类似的方法来做这样的事情 可以将数据类型传递给pl col import polars as p
  • 如何多行匹配两个字符串之间的所有文本

    我正在努力完成与所见相同的事情here 即假设您有如下文本 p something p p class sdf some text p p some other text p p The end p 匹配的正则表达式是什么 p class
  • 如何将 NodeJS 与 Angular 连接(在 Nginx 中)

    我有一个带有 Angular 和 NodeJS 的存储库 我在詹金斯中表现 install globally npm install g bower npm install g gulp install bower install npm
  • 如何在 VB 6 中获取当前 CPU 和 RAM 使用情况?

    如何获取VB 6代码中的CPU和内存使用情况 谢谢 确定当前机器上的CPU使用率
  • 从文本文件读取数据并创建对象

    我需要一些帮助 我正在 Java 上进行超市模拟 但我遇到了一个问题 我有一个文本文件 Stock txt 其中包含超市的所有库存 例如 0 面包店 巧克力蛋糕 12 5 250 1 肉 优质牛排 2 6 120 2 海鲜 金枪鱼 1 2
  • Java两次之间的差异[重复]

    这个问题在这里已经有答案了 可能的重复 计算两个 Java 日期实例之间的差异 时间 1 17 05 时间 2 17 08 我想在几秒钟内得到差异 long diffInMillis newerDate getTime olderDate
  • 在 Pig 中提取 CSV 文件的第一行

    我有几个 CSV 文件 标题始终是文件中的第一行 在 Pig 中将该行作为字符串从 CSV 文件中取出的最佳方法是什么 不能使用 sed awk 等进行预处理 我尝试使用常规 PigStorage 和 Piggybank CsvLoader
  • JavaScript |运算符[重复]

    这个问题在这里已经有答案了 谁能解释一下什么是 和之后的值呢 我知道 0 的输出会创建 13 个集合 即数字 3 2 1 0 但是 呢 1 或 2 var i 52 while i alert i 13 0 它是按位或运算符 有解释和例子在
  • 如何将 java 代码嵌入到批处理脚本中?是否可以创建 .java/.bat 混合文件?

    虽然有一些技术可以让您创建perfect 并非如此perfect 批处理文件与一些 本机 Windows 脚本语言的混合体 完美 的混合体应该是什么样子 嵌入的代码必须可以按原样使用 并且您应该有能力 将其复制粘贴到您想要的任何其他编辑器
  • 虚拟基类的创建顺序

    我有以下问题 struct A1 A1 std cout lt lt A1 struct A2 A2 std cout lt lt A2 struct AA1 virtual A1 A2 AA1 std cout lt lt AA1 str
  • 使用 Cobertura 从代码覆盖率中排除方法

    有没有办法将代码排除在 Cobertura 覆盖率报告之外 我们有一些方法不应包含在覆盖率报告中 因此不会降低覆盖率数字 我知道Clover有这样的功能 但我还没有找到Cobertura的类似功能 您可以从检测中排除类 那么它们就不应该出现
  • 如何在ListView上长按时传递变量?

    我会有列表视图和里面的很多项目 我希望用户可以长按项目并将其设置为收藏夹 为此 我需要长按此菜单获取数据库 ID 我有以下代码 Override public void onCreateContextMenu ContextMenu men