- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前在创建 ExpandableListView 时遇到问题。我不确定目前发生了什么,但我会解释我正在尝试做什么。
我以编程方式分配某一天的膳食。在每顿饭中(标题是组)是一个包含投票和订购按钮的 child 。当对一顿饭下订单时,这两者都会更改为“已订购”。如果下了另一个订单,则先前的订单按钮将返回到“订单”状态,并且所选的订单将变为已订购。投票也是如此。我通过为我的按钮设置一个点击监听器来解决这个问题,该监听器循环遍历所有其他按钮并将它们的文本设置为“order”/“vote”并将当前按钮文本设置为 ordered。
这在极少数情况下工作正常 - 但大多数时候,当我订购/投票一个项目时,它会将所选项目更改为“已订购”,并将我的可扩展 ListView 中的最后一个元素也更改为已订购。然后,如果我订购,假设是第三个元素,关闭并重新打开第二个元素,它也会更改为已订购,反之亦然。有时他们都改回订单或都改成订单。我发现很难弄清楚为什么会发生这种情况。
我相信它可能与 getChildView 函数有关。当我遍历打开每个元素的列表时, View 永远不会为最后一个元素设置,即使它已经分配了适当的数据。
我是不是误解了 ExpandableListView 的一个主要概念,还是还有别的东西。
我认为这里的 getChildView 函数可能有问题。我还将在下面提供其他相关类(class)的链接。如果您需要更多信息,请随时询问。
//Static class view holder
static class ViewHolder {
protected Button oBut;
protected Button vBut;
protected TextView description;
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
//Getting the appropriate child for the group and position
ExpandListChild child = (ExpandListChild) getChild(groupPosition, childPosition);
View view = null;
//Set up if doesn't exist
if (convertView == null) {
Log.d("OnClickListener", "groupPosition: " + groupPosition + " childPosition: " + childPosition);
Log.d("OnClickListener", "View being set up for: " + child.getName() + " desc: " + child.getDescription());
LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
view = infalInflater.inflate(R.layout.expandlist_child_item_todays, null);
//Attempt at viewholder
final ViewHolder holder = new ViewHolder();
holder.description = (TextView) view.findViewById(R.id.mealDescription);
holder.vBut = (Button)view.findViewById(R.id.vote);
holder.oBut = (Button)view.findViewById(R.id.order);
view.setTag(holder);
}
else {
view = convertView;
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.description.setText(child.getDescription());
holder.description.setTag(child.getTag());
holder.oBut.setOnClickListener(new OrderOnClick(groups, (Activity)context, holder.oBut, view, child));
holder.vBut.setOnClickListener(new VoteOnClick(groups, (Activity)context, holder.vBut, view, child));
return view;
}
ExpandListAdapterTodays (扩展并扩展我的 BaseExpandableListAdapter)
ExpandListAdapter (扩展 BaseExpandableListAdapter)
VoteOnClick (实现投票成功后更改按钮文本的类)
最佳答案
android 上的 listviews 高效工作的方式是它们实现了“ View 回收”方法,如果某些 View 离开屏幕,则相同的 View 将放回屏幕上的某个位置,并更改所有必要的位。这让事情使用更少的资源,实际上重复使用相同的资源,但如果你需要像你一样以特定顺序持久存在的状态,就会造成严重破坏。你应该做的是实现某种 map 或数组列表,其中对象的位置对应于它在 ListView 中的位置,然后通过制作的对象进行更改。有点蹩脚,但它有点像你的适配器的适配器方法。
现在我深表歉意,因为我无法准确地想象 onlick 方法应该如何工作,但通过它来看......就像:
for (int i = 0; i < groups.size(); i++) {
....
but.setText("Vote");
会变成
ArrayList<String> group_string_states = new ArrayList<String> ();
private void fillGroupStringStates () {
for(int i = 0; i < groups.length; i++) {
group_string_states.add("Order");
}
}
....
for (int i = 0; i < group_string_states.size(); i++) {
....
group_string_states.set(i, "Vote");
然后你做一个条件,比如如果 group_string_states.get[position] 说“投票”,则执行此操作。
好吧,这就是我尝试做的方式。我希望它有所帮助,如果没有,我真的很抱歉。
关于Android 可扩展 ListView - onClickListener,用于具有持久状态的子项中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12803064/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4 个月前关闭。 Improve
我已经为这个概念苦苦挣扎了一段时间。我正在尝试提出一种松散耦合的 Azure 组件设计,该设计可以使用队列和辅助角色完全可扩展,从而使项目出列并处理。我可以随意扩展工作角色,并且发布到队列从来都不是问
尝试在 android 中创建可扩展 ListView 。我希望每个组都扩展到一个预设的 XML 布局文件。例如。 A组{ 展开时显示 XML 文件 A:按钮、搜索栏、微调器等 } 乙组{ 展开时显示
在 android 可扩展 ListView 中,我需要显示子项,仅在按下展开折叠节点时..即;我不想让 children 按下可扩展 ListView 的行。我该如何完成? 问候,罗尼 最佳答案 我
我正在开发一个Android代码编辑器,但是当我对它应用语法突出显示时,它会变得很滞后,是否有任何方法可以对其进行优化? 这是我的代码: protected void onCreate(Bundle
我正在开发安卓应用程序。我发现下面的输出图像显示了以下问题。请帮我解决我的问题。 Xml file 输出截图- 最佳答案 使用 setIndicatorBounds。 开发链接:http://deve
最近我在尝试使用 android 的可扩展 ListView ,所以我四处搜索并偶然发现了这个 http://about-android.blogspot.com/2010/04/steps-to-i
在 Control.Exception 的文档中在 base 4.4.0.0 中有一个如何创建异常层次结构的示例。该示例展示了如何通过根据父异常声明 Exception 类的实例来捕获特定异常的概括。
我正在开发一个将显示一些可扩展列表的应用程序。事实上,有时该对象不会有任何子对象。所以我想在我的可扩展列表中仅显示具有子元素的元素。我尝试在 getGroupView 函数中放入 if ,如果该对象没
这是一个有点开放式的问题,但是,制作良好的可扩展 Electron 应用程序的好方法是什么? VSCode、Atom 和许多其他工具都支持扩展,但它们的代码库太大,我无法理解发生了什么。我对 Jupy
我和一些 friend 为 Facebook 编写了一款游戏,但没有过多考虑游戏的实际架构 - 想象一下当我们每月吸引超过 300,000 名独立玩家并且我们的服务器崩溃时我们的惊喜。 现在我们正在努
您好,我正在使用 Android Expandable listview 并在其中用不同的 View 膨胀 child 。我遇到的问题是,当我展开一个 View 然后打开另一个父 View 时,布局中
我的场景是,我有一个可扩展 ListView ,在列表中动态添加我和 child 。我的子布局就是这样。 当我点击相应项目的编辑按钮时,我打开对话框从用户那里获取输入,然后点击更新相应的详细信息更新到
我想使用 RecyclerView 创建项目列表,并希望在单击时展开特定项目(如电话列表)。我想在不使用任何库的情况下实现这一目标。谁能帮忙? 最佳答案 获取子数据列表作为数据集中父数据的成员。并且,
我使用 ExpandableListview ... 我能够将从 Web 服务检索到的值设置为子布局的单个 Textview。现在需要在 Web 服务的子布局中设置两个不同的 Textviews 值我
我的可扩展 ListView 的顺序似乎不正确。 这是我的数据提供者: public class DataProvider { public static HashMap> getInfo() {
所以我试图在我的可扩展列表的子项列表中创建一行,但它不起作用,这是我的布局:
我有一个需要自定义箭头的可扩展 ListView 。我尝试将 groupIndicator 设置为这样的选择器: 但是,出于某种原因,这会扭曲箭头的尺寸,请参见下文: 知道它们为
我正在尝试实现具有 2 种不同布局的 ExpandableListView,到目前为止,我花了一段时间才真正让 1 个 View 组使用一个布局,而其他 2 个 View 组使用另一个。到目前为止,外
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我是一名优秀的程序员,十分优秀!