如何实现onclicklistener动态创建textview?

时间:2013-02-17 04:06:18

标签: android dynamic onclicklistener

目前我在实现onclicklistener动态创建textview时遇到了一些问题。我会更详细地解释这个问题。我需要做的是,当我单击活动中的按钮时,我需要创建文本视图,当我单击该文本视图时,它应该被删除。但我无法为每个textview设置onclicklistener。因为,设置文本视图的onclicklistener被写在上述按钮的onclick函数内(用于创建textview的按钮),当它从按钮的onclick函数退出时它的范围就会结束(我认为这是问题)。所以我尝试使用可见和不可见的功能,这将在手边创建文本视图并使它们不可见,并且只有在单击按钮(用于创建文本视图的按钮)时它们才可见。但即使它是不可见的,也会分配空间(即空白空间将被提供)。

这是我的代码 此按钮addphone将通过插入edittext phoneno

中的值来动态创建textview
addphone.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
            // TODO Auto-generated method stub
        if(phoneno.getText().toString().length() > 0 && counter < MAX)
            {
                addphoneno[counter] = phoneno.getText().toString();
                phoneno.setText("");
                final TextView mybox = new TextView(getApplicationContext());
                mybox.setText(addphoneno[counter]);
                mybox.setPadding(5, 5, 5, 5);
                mybox.setBackgroundColor(Color.rgb(99, 99, 99));
                contactbox[counter] = mybox;
                contactbox[counter].setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                contactbox[counter].setId(100+counter);
                contactbox[counter].setText(addphoneno[counter]+"  "+"X");

                contactbox[counter].setClickable(true);
                contactbox[counter].setOnClickListener(this);     //This doesn't work!!!!!
                counter = counter+1;
            }
    }
});

但上面一行中的setOnClickListener无法正常工作

所以任何人都可以帮我解决这个问题。我希望你对我的问题很清楚。

谢谢!

3 个答案:

答案 0 :(得分:1)

你可以试试这个:

private OnClickListener phoneViewClickListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        // your code
    }
};

并在TextViews中使用该侦听器:

contactbox[counter].setOnClickListener(phoneViewClickListener);

答案 1 :(得分:0)

您必须实际定义onClickListener,而不是简单地将其设置为布尔值。

contactbox[counter].setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //this is where you would handle your click event
    }
});
祝你好运!

答案 2 :(得分:0)

如果您的按钮是在xml布局上定义的,那么您可以这样做。

在xml布局中,您可以定义用户单击按钮时将调用的方法:

 <?xml version="1.0" encoding="utf-8"?>
 <Button xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/add_phone"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/button_send"
     android:onClick="addTextView" />  // This is most imporant line

您的活动必须有一个与View参数同名的方法,如下所示:

/** Called when the user touches the button */
public void addTextView(View view) {
    // Do something in response to button click
    if(phoneno.getText().toString().length() > 0 && counter < MAX)
        {
            addphoneno[counter] = phoneno.getText().toString();
            phoneno.setText("");
            final TextView mybox = new TextView(getApplicationContext());
            mybox.setText(addphoneno[counter]);
            mybox.setPadding(5, 5, 5, 5);
            mybox.setBackgroundColor(Color.rgb(99, 99, 99));
            contactbox[counter] = mybox;
            contactbox[counter].setLayoutParams(new   LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            contactbox[counter].setId(100+counter);
            contactbox[counter].setText(addphoneno[counter]+"  "+"X");

            contactbox[counter].setClickable(true);
            contactbox[counter].setOnClickListener(this);     //This will work \o/
            counter = counter+1;
        }
}
}

在这个方法上,你应该把你的代码放到addViews。

由于所有添加的textview的行为必须相同(我以这种方式理解),当用户点击它时被删除,你可以让你的活动实现onClickListener,你需要实现它正确的活动的onClick方法。