TextView[][] textViewTable; //таблица ваших textView
for (int i = 0; i < textViewTable.length; i++)
for (int j = 0; j < textViewTable[i].length; j++){
final int I = i;
final int J = j;
textViewTable[i][j].setOnClickListener(new OnCLickListener(){
@Override
public void onClick(View v){
onItemClick(I,J)
}
})
}
1)考虑在单个视图中实现您的功能。您创建自己的类,继承自 View,然后在 onDraw 中根据对象的大小在需要的地方绘制您需要的数字。将所有要显示的数据存储在视图内,如果需要替换单元格值,请调用其 set(x,y,value) 方法,而不是 textViewXY.setText(value)。这将大大简化应用程序的生命周期,在一个方法中计算 80 个元素的位置比为相同元素运行 onMeasure 和 onLayout 调用树要容易得多。
2)分支的意思并不完全清楚。您可以循环遍历所有 textView 并将其挂在每个侦听器上,以便它立即使用必要的参数。或多或少是这样的:
不是最好的选择,但它会摆脱这种情况。你也可以将每个TextView的标识符放在一个标签中,例如“x:y”的形式,点击时解析,触发相应的事件。
好吧,如果您按照我在第 1 段中建议的那样实现您的视图,那么问题就消失了,因为您必须找出用户通过点击坐标到达的位置。
3) 如果您还没有将所有的 TextViews 放入一个数组中 - 这样做。此外,我建议在代码中而不是在 xml 中循环创建它们,并且不要产生一堆无意义的 id 和 findViewById。如果您对如何使用 textView 将按钮与活动连接起来有疑问,请创建一个单独的问题
例如,从每行四个项目的 RecyclerView 开始(例如一个磁贴)。因此,您将获得元素的 id,向将返回相同 id 的项目添加一个侦听器