android - 如何将计数器值分配给可扩展列表视图按钮
问题描述
我有可扩展的列表视图,每个视图都有按钮。我需要为每个按钮设置一个标签,例如 button1(count 0)、button1(count 1)、button1(count 2).......我每次都尝试递增 count,但它正在设置一些随机计数器值.
我怀疑我在错误的地方做 counter++ 请有人建议我在哪里可以增加计数器值。
通用分配计数器:
int counter = 0;
在 getChildView() 方法中
@Override
public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
if (view == null) {
holder = new ViewHolder();
LayoutInflater parentInflater = (LayoutInflater) mctx.getSystemService(mctx.LAYOUT_INFLATER_SERVICE);
view = parentInflater.inflate(R.layout.itemname_child_layout, null);
holder.button = view.findViewById(R.id.childrecordbtn);
} else {
holder = (ViewHolder) view.getTag();
}
holder.button.setTag(counter);
holder.button..setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int tag = view.getTag();
Log.i("Tag Value = ",tag);
}
}
counter++;
return view;
}
上面的代码在按钮单击后返回一些随机值。
输出 :
Button1 : "Tag Value : 24"
Button2 : "Tag Value : 25"
Button3 : "Tag Value : 113"
解决方案
看一下 的定义getChildView()
:
getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
这意味着在您的代码中,i
是groupPosition
并且i1
是childPosition
. 您应该只依靠这些参数来确定每一行的内容,而不是使用外部计数器。
您可以通过以下计算得到一维数组索引:
int sum = 0;
for(int j = 0;j < i; j++)
{
sum += getChildrenCount(j);
}
final int arrayIndex = sum + i1;
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Tag Value = ",arrayIndex);
}
}
推荐阅读
- angular - 在 Angular 11 中将 ng-template 内容克隆到 document.body 的最佳实践是什么?
- c++ - Codechef 拒绝(数字的阶乘)
- java - JDBC 事务 Oracle Weblogic
- python-3.x - 如何避免从两个不同的随机变量中获得相同的值,但值来自同一个列表?
- fork - 我如何分叉币安智能链并创建自己的区块链
- javascript - Client side input validation via Bootstrap and jQuery
- java - 在Java中,一个类的所有成员都存储在连续内存中吗?
- c++ - MSVC 中的向量构造函数错误?(原始数组的向量)
- jupyter-notebook - Julia 1.6.2 没有出现在 Jupyter 笔记本中
- java - 使用没有 FirebaseDynamicLinks 的 android 应用程序打开 Firebase 动态链接