草庐IT

android - 每行有两个按钮的自定义 ListView

coder 2023-12-16 原文

我花了两天时间试图解决这个问题。如果有人能提供帮助,我将不胜感激。

我想要实现的目标:

有一个 ListView,玩家可以通过文本字段(玩家名称)和提交按钮添加新条目(玩家)。在 ListView 的每个字段中,我显示玩家名称,然后是两个 ImageButton。一个带有男性符号,一个带有女性符号。男性符号默认切换,用户可以通过切换男性按钮或女性按钮来将玩家设置为男性或女性。最后,一旦用户移动到下一个屏幕(一个新 Activity ),应用程序会将玩家姓名和附加的性别保存到某种形式的存储中并继续进行下一个 Activity 。

我取得的成就:

我有一个简单的数组适配器,在玩家向列表中添加新玩家名称时,我在其上运行 notifyDataSetChanged()。适配器还设置为使用自定义行布局文件。在布局文件中,它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content">
    <RelativeLayout android:layout_height="wrap_content"
        android:layout_width="fill_parent" android:id="@+id/relativeLayout1" android:layout_marginTop="5dp">
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/playerName"
            android:layout_centerVertical="true" android:text="Derp" android:textStyle="bold" android:layout_marginLeft="5dp" android:textSize="22dp" android:textColor="@color/male_blue"></TextView>
        <ImageButton android:layout_height="60dp"
            android:layout_width="60dp" android:onClick="maleClickHandler"
            android:src="@drawable/male_icon_settings" android:id="@+id/buttonA" android:layout_alignParentRight="true" android:layout_marginRight="65dp"></ImageButton>
        <ImageButton android:onClick="femaleClickHandler"
            android:layout_height="60dp" android:layout_width="60dp" android:id="@+id/buttonB"
            android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:src="@drawable/female_icon_settings"></ImageButton>
    </RelativeLayout>
</LinearLayout>

每行上的两个按钮引用类文件中的方法。这是我的代码:

public void maleClickHandler(View v) {

        RelativeLayout vwParentRow = (RelativeLayout) v.getParent();
        ImageButton maleButton = (ImageButton) vwParentRow.getChildAt(1);
        maleButton.setImageDrawable(getResources().getDrawable(
                R.drawable.male_icon_selected));
        vwParentRow.refreshDrawableState();
    }

    public void femaleClickHandler(View v) {

        RelativeLayout vwParentRow = (RelativeLayout) v.getParent();
        ImageButton femaleButton = (ImageButton) vwParentRow.getChildAt(2);
        femaleButton.setImageDrawable(getResources().getDrawable(
                R.drawable.female_icon_selected));
        vwParentRow.refreshDrawableState();
    }

我还没有在这两个按钮之间实现任何互连,一次只允许激活一个按钮,或者甚至取消切换一个按钮,因为我认为我可能完全采用了错误的方法。

问题:

在列表中添加新条目后,AFTER 切换一个和/或其他男性/女性按钮,事情变得非常有问题,并且男性/女性切换图标可能会像它应该的那样移动,使用附加的播放器字符串,或者更可能的是,那些被切换的将留在第一行(列表的数组位置 0),甚至移动到第二个列表位置,并将它们自己复制到上面的行上。

您可以如何帮助...?

我在屏幕下方附上了来自模拟器的图片,以帮助说明我的观点 Screenshot!

我认为我可能需要使用某种形式的自定义适配器;我已经对这个主题做了很多阅读,但我找不到任何与我想要实现的目标相关的东西,所以如果你能指出我正确的方向,或者甚至尝试将最基本的解决方案放在一起类型的问题,我将不胜感激。

最后,当我开始工作时,哪种存储形式最适合存储玩家姓名及其性别?我希望用户在退出应用程序并重新启动后能够保留播放器列表。

感谢您的帮助! :)

最佳答案

您将需要使用自定义适配器,它本身应该能够跟踪每个条目的男性/女性标志。

您的方法将不起作用,因为按钮的状态由适配器的 getView 方法管理。即使您通过挖掘子项来更改它们,下次调用 getView 方法时,它也会把事情搞砸。

关于android - 每行有两个按钮的自定义 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6668514/

有关android - 每行有两个按钮的自定义 ListView的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  3. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  4. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  5. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  6. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  7. ruby - 定义方法参数的条件 - 2

    我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano

  8. ruby - 如何在 Grape 中定义哈希数组? - 2

    我使用Ember作为我的前端和GrapeAPI来为我的API提供服务。前端发送类似:{"service"=>{"name"=>"Name","duration"=>"30","user"=>nil,"organization"=>"org","category"=>nil,"description"=>"description","disabled"=>true,"color"=>nil,"availabilities"=>[{"day"=>"Saturday","enabled"=>false,"timeSlots"=>[{"startAt"=>"09:00AM","endAt"=>

  9. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  10. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

随机推荐