Android Studio TextViews onClick都执行相同的操作,我该如何解决?

时间:2017-07-28 02:00:18

标签: java android onclick onclicklistener

我有这个函数,它应该创建一个具有唯一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);
        }

    }

1 个答案:

答案 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的方式。