首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >点击ListView项目上的“打开”按钮

点击ListView项目上的“打开”按钮
EN

Stack Overflow用户
提问于 2018-05-19 00:43:24
回答 1查看 673关注 0票数 2

我在我的C#安卓应用程序中有一个自定义的列表视图,每一行都包含一个textviewImageViewswitch。单击Listview项时,我希望打开行的项开关。

MainActivity:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<TableList> list = = new List<TableList>();
list.Add(new TableList("Germany"));
list.Add(new TableList("France"));
list.Add(new TableList("Finland"));
listView.ItemClick += delegate (object sender, AdapterView.ItemClickEventArgs e)
        {
            string selected = t.Name;
            if (selected == "France")
            {
                 // Turn the proper switch for France row ON
            }
        };

清单视图的ListAdapter和ListClass:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ListAdapter : BaseAdapter<TableList>
{
    List<TableList> items;
    Activity context;
    public ListAdapter(Activity context, List<TableList> items)
        : base()
    {
        this.context = context;
        this.items = items;
    }
    public override long GetItemId(int position)
    {
        return position;
    }
    public override TableList this[int position]
    {
        get { return items[position]; }
    }
    public override int Count
    {
        get { return items.Count; }
    }
    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var item = items[position];
        View view = convertView;
        if (view == null) // no view to re-use, create new
            view = context.LayoutInflater.Inflate(Resource.Layout.CoinList, null);
        view.FindViewById<TextView>(Resource.Id.CoinName).Text = item.Name;
         view.FindViewById<ImageView>(Resource.Id.imageView1).SetImageResource(Resource.Drawable.n);

        If item is clicked set it on
        {
            view.FindViewById<Switch>(Resource.Id.switch).SetOn 
        }
        else
        {
            view.FindViewById<Switch>(Resource.Id.switch).SetOf
        }
        return view;
    }
}
public class TableList
{
    public string Name;
    public TableList(string Name)
    {
        this.Name = Name;
    }
}

我不知道该在哪里设置开关(在listView.ItemClick事件中或在ListAdapter中),也不知道如何将其设置为ON。请帮助我这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-20 23:43:42

这里是我的演示。

你可以选择一个来达到你的目标。我将通过ItemClick事件向您展示如何做到这一点:

单击Listview项时,我希望打开行的项开关。

因为,Switch会从ViewGroup获得焦点。因此,我从Switch中移除MyAdapter中的焦点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
holder.ms.Focusable = false;//ms is Switch

现在,这是我的ItemClick事件(单击该项时打开开关):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void MListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
        var ll = e.View as LinearLayout;
        var sw = ll.GetChildAt(1) as Switch;
        if (sw.Checked)
        {
            sw.Checked = false;
            adapter.changeState((int)sw.Tag,false);
        }
        else
        {
            sw.Checked = true;
            adapter.changeState((int)sw.Tag, true);
        }
}

众所周知,ListView存在重用问题,因此,我添加一个bool属性来控制Switch的状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyData:Java.Lang.Object {
    public MyData(string p,bool b) {
        this.position = p;
        this.isCheck = b;
    }
    public string position { get; set; }
    public bool isCheck { get; set; }
}

下面是changeState方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
internal void changeState(int position, bool v)
{
    mitems[position].isCheck = v;
    this.NotifyDataSetChanged();
}

这是CheckedChange事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void Ms_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
{
    var sm = sender as Switch;
    Log.Error("Ms_CheckedChange", (int)sm.Tag+"");
    if (e.IsChecked&&!mitems[(int)sm.Tag].isCheck)
    {
        mitems[(int)sm.Tag].isCheck = true;
        this.NotifyDataSetChanged();
    }
    else if(!e.IsChecked&& mitems[(int)sm.Tag].isCheck)
    {
        mitems[(int)sm.Tag].isCheck = false;
        this.NotifyDataSetChanged();
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50423429

复制
相关文章
RESTful风格的应用
@RestController:简化开发过程。不需要在方法上额外添加@ResponseBody
Breeze.
2022/09/23
2880
RESTful风格的应用
本节讲解一个全新的话题,RESTful开发风格。 REST :全称Representational State Transfer(表现层状态转换),资源在网络中,以某种表现形式进行状态转移。听起来很难理解,其实说白了就是在我们web环境下,如果你要获取某个图片,js,网页这些资源的时候,就要以url的形式进行表现。我们访问一个图片的网址,那这个资源返回的就自然是一张图片,如果访问的是一个CSS,那返回的就是一个CSS。好像这种设计理念对于我们的web应用来说是在再基础不过的东西。其实这是rest给我们提出来的一个设计理念,在web环境以URL的方式,来进行资源的传递。那么基于这种REST的理念,注意,是理念,不是具体的实现。
害恶细君
2022/11/22
6390
RESTful风格的应用
python风格——动态类型
想要写出python风格的代码,就得理解python的特点,合理的应用python所带来的东西。 python是一门动态类型的语言,这是由python的设计思想所决定的。在python中,我们编写对象接口而不是类型。我们关心的是一个对象能做什么,而不是关心它是什么。它是什么并不重要,重要的是它能做什么?我们希望代码能自动的适应非常多的类型,任何具有兼容性的接口对象能够正常工作。实际上这就是多态(多态:指为不同数据类型的实体提供统一的接口),这也是使用python的核心思想之一。
zy010101
2021/06/09
5920
动态代理原理及在 Android 中的应用
因为一个静态代理类只能服务一种类型的目标对象,在目标对象较多的情况下,会出现代理类较多、代码量较大的问题。
trampcr
2019/11/04
2.2K0
动态 | 伯克利最新研究:GANs在字体风格迁移上的应用
AI科技评论按:怎样能快速生成风格相同的字体呢?伯克利 AI 研究院最新发表的一篇博客告诉你他们最新的研究。 左:给出的电影海报,右:由MC-GAN生成的新电影片名 文字是平面设计中很突出的视觉元素。
AI科技评论
2018/03/30
9310
动态 | 伯克利最新研究:GANs在字体风格迁移上的应用
android变化HOLO对话风格
andriod风修改对话框格,通过设置theme实现。一些要素需要通过Java代码更改,下面的对话框更改的步骤的例子称号。
全栈程序员站长
2022/07/06
3450
REST风格的应用程序实现
莫笑我老土,因为我确实是最近才听说REST风格的,以前就是觉得 /category/product/pid
大江小浪
2018/07/25
3620
android中的深度学习——快速风格迁移
额,最近忙着答辩,先上一个效果图吧,把坑先占了。毕设完了之后有时间再写。 处理前 处理后
何时夕
2018/06/14
6120
半圆型动态仪表盘风格图表
▼ 下午在浏览论坛的时候,刚好看到秋叶老师的一个图表教程,风格是半圆型饼图,用VBA控制。 查看了一下后台的VBA代码,有点小复杂,不过勉强能看懂,自己试了一把,确实可行。 Sub 动起来()
数据小磨坊
2018/04/10
2.2K0
半圆型动态仪表盘风格图表
[解读REST] 4.基于网络应用的架构风格
衔接上文[解读REST] 3.基于网络应用的架构,上文介绍了一组自洽的术语来描述和解释软件架构;如何利用架构属性评估一个架构风格;以及对于基于网络的应用架构来说,那些架构属性是值得我们重点关注评估的。本篇在以上的基础上,列举一下一些常见的(REST除外)的适用于基于网络应用的架构风格,并使用对比架构属性的方式对其进行评估。 1 架构风格所产生的架构属性 架构设计的目的是为了满足或者超出应用的需求,而不是为了创造出一种特殊的交互拓扑或者一种特殊的设计方式。当设计一个系统时所选择的架构风格,必须与这些需求保持一
blackheart
2018/01/19
8140
Android应用防止so注入防止动态调试参考代码
由于公司应用需要过安全测试,测试那边说有so注入漏洞,所以找到了这份代码,并成功通过测试。
用户1696846
2023/08/25
6830
Android的动态加载插件
我们都知道要获Res下的文件,需要用Resource对象,但是apk是未安装的,宿主并没有对应的resId,因此获取资源需要进行反编译,反编译需要对应的插件的包名,就是反编译R资源。 贴代码,举个例子: 插件管理器类
包子388321
2020/06/16
1.9K0
Android旁门左道之动态替换应用程序
本文讨论了Android类加载器的两种分类,以及它们的区别和联系。作者详细介绍了双亲委托模型以及自定义类加载器的工作原理。通过示例代码,作者展示了如何通过自定义类加载器解决一些类加载器无法解决的问题,包括动态替换系统类、实现自定义视图、以及解决一些系统类加载器带来的问题。
MelonTeam
2018/01/04
2.3K2
Android旁门左道之动态替换应用程序
Android应用防止so注入防止动态调试参考代码
由于公司应用需要过安全测试,测试那边说有so注入漏洞,所以找到了这份代码,并成功通过测试。
用户1696846
2019/12/30
3.7K0
【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
分析上一篇博客 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 ) 解包后的文件 ;
韩曙亮
2023/03/29
9270
【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
深度学习应用:iOS 上的图像风格迁移
图像风格迁移,用 python 就可以实现,如果想要在手机上面(不联网)查看效果怎么办呢?
iOSDevLog
2019/02/20
1.1K0
动态代理的实际应用
最近在用 Python 的 SQLAlchemy 库时(一个类似于 Hibernate 的 ORM 框架),发现它的 Events 事件还挺好用。
crossoverJie
2022/10/27
4340
动态代理的实际应用
Android动态权限
MelonTeam
2018/01/04
1.5K0
Android动态权限
点击加载更多

相似问题

针对不同风格的Android应用的动态应用流程

10

android动态改变风格

30

Android应用程序风格

11

Android -设置应用主题(风格)

11

Angular 4如何应用动态风格?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文