如何检测在CustomList中单击了哪个按钮以及在哪个位置

2024-01-02

我正在使用自定义列表视图,其中每个项目都有两个按钮。以下是我的项目 xml。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:weightSum="10">

            <Button
                android:id="@+id/btn_sound"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_gravity="left"
                android:layout_marginLeft="3dp"
                android:layout_marginTop="3dp"
                android:layout_marginBottom="3dp"
                android:layout_marginRight="0dp"
                android:background="@drawable/btn_background"
                android:gravity="left|center_vertical"
                android:paddingLeft="10dp"
                android:text="Sound Name"
                android:textSize="20sp"
                android:textStyle="bold"
                 android:layout_weight="7" />

            <ImageButton
                android:id="@+id/ib_info"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_gravity="right"
                android:gravity="left|center_vertical"
                android:layout_marginLeft="0dp"
                android:layout_marginTop="3dp"
                android:layout_marginBottom="3dp"
                android:layout_marginRight="3dp"
                android:layout_weight="3"
                android:src="@drawable/btn_info_source"
                android:background="@drawable/btn_info_background" />

</LinearLayout>

以下是我正在使用的适配器。

public class CustomListAdapter extends BaseAdapter implements OnClickListener {
    Context mContext;
    String[] mArrayList;

    public CustomListAdapter(Context context, String[] SoundNames) {
        this.mContext = context;
        this.mArrayList = SoundNames;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder;
        if (convertView == null) {
            holder = new Holder();
            LayoutInflater inflater1 = (LayoutInflater) this.mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = inflater1.inflate(R.layout.list_item, null);
            holder.btn_sound = (Button) convertView.findViewById(R.id.btn_sound);
            holder.ib_info = (ImageButton) convertView.findViewById(R.id.ib_info);
            convertView.setTag(holder);
        } else {
            holder = (Holder) convertView.getTag();
        }

        holder.btn_sound.setText(mArrayList[position]);
        //holder.btn_sound.setOnClickListener(this);
        return convertView;
    }

    private static class Holder {

        Button btn_sound;
        ImageButton ib_info;
    }

    @Override
    public int getCount() {
        return mArrayList.length;
    }

    @Override
    public Object getItem(int position) {
        return mArrayList[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

}

我正在以下代码中设置列表视图。

public class SectionFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView;
        ListView mListView;
        Bundle args = getArguments();
        int currentView = args.getInt(Constants.ARG_SECTION_NUMBER) - 2;

        if (currentView == 0) {
            rootView = inflater.inflate(R.layout.deer, container, false);
            //mListView = (ListView) rootView.findViewById(R.id.listView_deer);
            CustomListAdapter mListAdapter = new CustomListAdapter(MainActivity.appContext, Constants.deer_Sound_Names);
            //mListView.setAdapter(mListAdapter);
            ((AdapterView<ListAdapter>) rootView.findViewById(R.id.listView_deer)).setAdapter(mListAdapter);
            ((AdapterView<ListAdapter>) rootView.findViewById(R.id.listView_deer)).setOnItemClickListener(mListner);


        } else if (currentView == 1) {
            rootView = inflater.inflate(R.layout.guide_layout, container, false);
            Toast.makeText(MainActivity.appContext, "Loading Guide...", Toast.LENGTH_LONG).show();
            WebView guideViewer = (WebView) rootView.findViewById(R.id.webView_guide);
            guideViewer.loadUrl("file:///android_asset/deer_html/guide.htm");

        } else {

            rootView = inflater.inflate(R.layout.activity_main, container,
                    false);
        }
        return rootView;
    }
    OnItemClickListener mListner = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
            Log.d("HFI","Item Clicked: "+Constants.deer_Sound_Index[position]);
            switch (view.getId()) {
            case R.id.btn_sound:
                Log.d("HFI","Sound: "+Constants.deer_Sound_Index[position]);
                break;
            case R.id.ib_info:
                Log.d("HFI","Info: "+Constants.deer_Sound_Index[position]);
                break;
            default:
                break;
            }           
        }
    };

}

问题:自定义列表视图未注册setOnItemClickListener(mListner);实际上我想检测哪个按钮以及在哪个位置被单击SectionFragment class.


这会起作用

    @SuppressWarnings("unchecked")
public class ViewHolder
{

private static final String TAG = "View Holder";

public static <T extends View> T get(View view, int id) 
{
    SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
    if (viewHolder == null) 
    {
        viewHolder = new SparseArray<View>();
        view.setTag(viewHolder);
    }
    View childView = viewHolder.get(id);
    if (childView == null) 
    {
        childView = view.findViewById(id);
        viewHolder.put(id, childView);
    }
    return (T) childView;
}

public static <T extends View> T get(View view, int id, int position) 
{
    SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
    if (viewHolder == null) 
    {
        viewHolder = new SparseArray<View>();
        view.setTag(viewHolder);
    }
    View childView = viewHolder.get(id);

    if (childView == null) 
    {
        childView = view.findViewById(id);
        viewHolder.put(id, childView);
    }
    childView.setTag(position);
    return (T) childView;
}
}  

并在 getView 中

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

    if (convertView == null) {

        LayoutInflater inflater1 = (LayoutInflater) this.mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = inflater1.inflate(R.layout.list_item, null);

    } 
    Button btn_sound = ViewHolder.get(findViewById(R.id.btn_sound), position);
        ImageButton ib_info = ViewHolder.get(findViewById(R.id.ib_info));


    btn_sound.setText(mArrayList[position]);
    btn_sound.setOnClickListener(this);
    return convertView;
}  

 @Override
    public void onClick(View v) { 
        int position = (Integer)v.getTag();
        // do whatever you want
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测在CustomList中单击了哪个按钮以及在哪个位置 的相关文章

  • 如何做Android - 滑动抽屉从左到右滑动..?

    如何将android滑动抽屉从LTR滑动 使用时android orientation horizontal 它从 RTL 滑出 我该如何进行 LTR 谢谢 我找到了答案表格 Here http blog sephiroth it 2011
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • 如何正确释放Android MediaPlayer

    我正在尝试向我的 Android 应用程序添加一个按钮 当点击该按钮时它会播放 MP3 我已经让它工作了 但没有办法释放 mediaPlayer 对象 因此即使在我离开活动后它仍然会继续播放 如果我在react 方法之外初始化MediaPl
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • Android应用程序组件销毁和重新创建的详细信息

    有人可以向我提供一些具体的 值得信赖的 最好是简洁的 信息 内容如下 系统销毁和 如果适用 重新创建组件的顺序 片段 活动 活动的线程 异步任务 计时器 静态数据 类何时卸载 其他类中的线程 异步任务 定时器 主机 TabActivity
  • 自定义首选项中的android首选项水平分隔线?

    我创建了自己的自定义首选项对象来扩展首选项 我创建它们只是因为这些自定义数据类型没有首选项 一切正常 但我的自定义首选项没有相同的外观 因为它们缺少系统首选项对象具有的水平分隔线 我已经查找了创建水平分隔线的代码 但我找不到它是在哪里完成的
  • Dialog.setTitle 不显示标题

    我正在尝试向我的对话框添加自定义标题 但是每当我运行我的应用程序时 它都不会显示标题 我创建对话框的代码是 final Dialog passwordDialog new Dialog this passwordDialog setCont
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • Android Studio 与本地网络共享上的项目文件

    这是我的设置 Android Studio 项目文件位于 Ubuntu 14 10 盒子上的共享文件夹中 尝试在 Windows 8 机器上运行 Android Studio 1 0 2 并将 U 驱动器映射到包含项目文件的 Ubuntu
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • Mipmap 与可绘制文件夹[重复]

    这个问题在这里已经有答案了 我正在使用 Android Studio 1 1 Preview 1 我注意到 当我创建一个新项目时 我得到以下层次结构 不同 DPI 的 Mipmap 文件夹 不再有不同 DPI 的可绘制文件夹 我应该将所有资
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • Android 2.3 模拟器在更新位置时崩溃

    我正在使用 Eclipse 编写和调试 Android 应用程序 我需要做的事情之一是更新设备的位置 因此我尝试使用模拟器控制窗口中的位置控制面板 在 手动 选项卡上 我选择 十进制 输入有效的纬度和经度 然后单击 发送 不幸的是 接下来发
  • 如何检查 Android 中的同步设置

    我正在构建一个 Android 应用程序 我需要检查设备中注册的每个单独帐户的同步设置 我知道我可以通过 ContentResolver 类来做到这一点 但我遇到了一些问题 我已设法获取设备上所有帐户的列表 但我不知道在运行时从哪里获取特定
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A
  • 我的应用程序中的后退按钮出现问题[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在手机关闭时清除共享首选项值 你

随机推荐

  • 使用静态方法与实例化包含该方法的类的性能

    我正在开发一个 C 项目 以前的程序员不知道面向对象编程 因此大部分代码都在巨大的文件中 我们谈论的是大约 4 5000 行 分布在数十个甚至数百个方法中 但只有一个类 重构这样一个项目是一项艰巨的任务 所以我现在已经半学会了忍受它 每当在
  • angular2 rc4“XHR错误(404未找到)加载/traceur

    我将 angular2 从 RC2 迁移到 RC4 现在收到以下错误 localhost 36 Error Error XHR error 404 Not Found loading http localhost 3000 traceur
  • 隐藏 SEO 黑名单 [已关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在使用回发对大量数据执行分页 由于我没有可供谷歌阅读的站点地图 因此谷歌永远不会知道某些产品 因为谷歌不会按任何按钮 如果用户代理是搜索引擎的用户
  • excepts.TypeError: src 不是 numpy 数组,也不是标量

    import cv2 import numpy as np def imageMoments img Single channel 8 bit or floating point 2D array read original cv2 imr
  • 调度操作以响应取消

    我从取消食谱 https redux observable js org docs recipes Cancellation html来自 redux observable 文档并希望对其进行一些扩展 基本上我有一个场景 在触发取消后 使用
  • 从unix文件中获取日期

    我想从 txt 文件中获取日期 如下所示 933 Mahinda Perera male 1989 12 03 2010 03 17T13 32 10 447 0000 192 248 2 123 Firefox 1129 Carmen L
  • 迭代计算不同长度

    我有一个 n 2 df 第一列是起始月份 第二列是每月回报 下面的示例 使用动物园包 日期以年月形式显示 我想计算从每个起始月份回报开始的 1 到 12 个月的回报 并使用它们创建一个 n 13 数据框 复合回报构成最后 12 列 第 2
  • 如何在 adb shell am start 的 URL 中包含 & 符号?

    Using adb shell am start some url 我可以使用活动管理器启动 URL 但是 如果我包含多个 URL 参数 则除第一个参数之外的所有参数都会被删除 Example adb shell am start http
  • 使用 Express 4.0 上传文件:req.files 未定义

    我试图获得一个与 Express 4 0 一起使用的简单文件上传机制 但我不断得到undefined for req files in the app post身体 这是相关代码 var bodyParser require body pa
  • Swift Xcode 索引冻结或缓慢

    也许这只是我经历的一个恼人的 功能 从 Xcode 6 0 1 升级到 Xcode 6 1 后 情况发生了变化 Xcode 6 1 永远索引项目或编译源文件 该工程规模并不大 它只包含工作区中的一堆 Swift 文件和 AWS SDK 2
  • 用美元符号替换 javascript regexp 匹配组

    这个应该很简单 让我们看一下字符串 str 1 99 or 4 89 我想在金额前面添加一个美元符号 我试过 str replace d d d g 1 它给了我 1 或 1 所以我坚持做 str replace d d d g 1 rep
  • spring中没有默认构造函数的类的bean类实例化

    我在模型中使用第三方库类 XYZ 作为参数 XYZ 没有默认构造函数 所以 spring 无法为其创建 bean 给出错误消息 org springframework web util NestedServletException Requ
  • 在满足特定条件之前“阻止”的最佳方法

    我想创建一些以通用方式使用的方法 它会阻塞 除非某个超时到期 直到满足给定条件 代码中的用法类似于 WaitUntil condition 我尝试使用 While 循环来实现它 但这似乎是一种浪费 在当前的实现中 我正在初始化一个 一次性
  • 在 ios swift 中实施 Google Analytics

    我正在遵循 Analytics for iOS developers google com analytics devguides collection ios v3 ver swift 指南 但我的 Swift 代码项目中出现了无法修复的
  • 使用 imap 和 php 检索最近 3 封电子邮件

    我试图弄清楚如何使用 imap 和 php 获取最新的 3 封电子邮件 已看到和未看到 由于邮箱内有 1 000 封电子邮件 因此需要节约资源 我认为获取所有标头可能需要太多资源 我只需要发件人 主题和日期 任何想法 感谢您的任何建议 帮助
  • iPhone 上的日期字符串中的毫秒数应使用什么格式字符串?

    我需要解析包含毫秒的格式的字符串 我应该使用什么格式字符串来获取正确的日期值 例如 假设我有一个具有以下值的字符串 2011 06 23T13 13 00 000 在以下代码中我应将什么格式字符串传递给 NSDateFormatter NS
  • VB.NET 中标识符两边的方括号代表什么?

    一般来说 我对 VB 和 NET 非常熟悉 但我刚刚遇到了这段代码 Me GetType 周围括号的用途是什么GetType 方括号用于告诉编译器应该将其解释为类型 即使它是关键字 但你的例子应该是一样的Me GetType 例如 您可以将
  • 良好的 DRY 方法来渲染和 AJAX 更新页面

    想象一下一个评论网站 用户可以在其中输入评级和可选的简短评论 在每个评论页面上 您都会收到许多评论 这些评论显示在页面末尾的表格中 顺便说一句 不寻找数据网格类型控件 太简单了 我想让用户输入新评论并更新页面而无需刷新页面 到目前为止都是简
  • MEF 和 ASP.NET MVC

    我想将 MEF 与 asp net mvc 一起使用 我写了以下控制器工厂 public class MefControllerFactory DefaultControllerFactory private CompositionCont
  • 如何检测在CustomList中单击了哪个按钮以及在哪个位置

    我正在使用自定义列表视图 其中每个项目都有两个按钮 以下是我的项目 xml