我有这个函数,它应该创建一个具有唯一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);
}
}
答案 0 :(得分:2)
您使用不同的paddingTop
来垂直布局TextView
:
textViewArray[i].setPadding(8,8+50*i,8,0);
这使得TextView
在视觉上彼此分离,但实际上它们都是重叠的,第二个重叠第一个,第三个重叠第二个,等等。最后,第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的方式。