0

目前,我在将 onclicklistener 实现为动态创建的 textview 时遇到了一些问题。我会更详细地解释这个问题。我需要做的是,当我单击活动中的按钮时,我需要创建文本视图,当我单击该文本视图时,它应该被删除。但我无法为每个文本视图设置 onclicklistener。因为,textviews 的设置 onclicklistener 是写在上述按钮(用于创建 textview 的按钮)的 onclick 函数中,所以当它退出按钮的 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 不起作用

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

谢谢你!

4

3 回答 3

1

你可以试试这个:

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

并在您的 TextViews 中使用该侦听器:

contactbox[counter].setOnClickListener(phoneViewClickListener);
于 2013-02-17T05:07:23.840 回答
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 方法活动。

于 2013-02-17T05:33:27.480 回答
0

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

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

祝你好运!

于 2013-02-17T04:23:35.973 回答