我有这个函数,它应该创建一个具有唯一 ID 的 TextViews
数组。
每个 TextView
都应该执行一个独特的操作,但是当单击其中任何一个时,它们会执行最后一个 TextView
的功能。
(即,他们中的任何人按照我设置的方式将 9 附加到最后一个 TextView
)你知道它为什么这样做吗?我该如何解决它?
如有任何帮助,我们将不胜感激。
//Code:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_what_can_imake);
int textViewCount = 10;
TextView[] textViewArray = new TextView[textViewCount];
RelativeLayout myLayout = (RelativeLayout) findViewById(R.id.myLayout);
for(int i = 0; i < textViewCount; i++) {
textViewArray[i] = new TextView(this);
textViewArray[i].setText("Title"+Integer.toString(i));
textViewArray[i].setPadding(8,8+50*i,8,0);
textViewArray[i].setId(i);
LayoutParams myTitleDimensions = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
textViewArray[i].setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
int myId = v.getId();
((TextView) v).append(Integer.toString(myId));
}
});
myLayout.addView(textViewArray[i],myTitleDimensions);
}
}
最佳答案
您正在使用不同的 paddingTop
来垂直布局您的 TextView
:
textViewArray[i].setPadding(8,8+50*i,8,0);
这使得 TextView
在视觉上彼此分离,但实际上它们都是重叠的,第 2 个与第 1 个重叠,第 3 个与第 2 个重叠,等等。最后,第 9 个一个重叠,所以无论你点击哪个文本,你实际上点击了第 9 个。
要解决此问题,您应该更改布局 TextView
的方式。
例如,使用RelativeLayout.addRule(int verb, int anchor)
:
RelativeLayout.LayoutParams myTitleDimensions = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
if (i > 0) {
myTitleDimensions.addRule(RelativeLayout.BELOW, i - 1);
}
顺便说一下,0
不是一个有效的 id,所以你的第一个 TextView
仍然会被第二个重叠,只是稍微改变一下生成 id 的方式.
关于java - Android Studio TextViews onClick 都执行相同的操作,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45363696/