在以编程方式创建的textview上设置onclick事件

Luk*_*eva 5 android click textview

我根据从数据库中检索到的记录动态创建可点击的textview,就像这样.

DBAdapter db = new DBAdapter(this);

db.open();
Cursor c = db.getAllProfiles();
if(c.moveToFirst())
{
    do{
        TextView tv = new TextView(this);
        tv.setText(c.getString(1));
        tv.setTextSize(18);
        tv.setTextColor(Color.BLACK);
        tv.setClickable(true);
        tv.setPadding(0, 10, 0, 0);
        tv.setGravity(Gravity.CENTER);
        mainLayout.addView(tv);

        tv.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
        Toast.makeText(getBaseContext(), tv.getText().toString(), Toast.LENGTH_LONG).show();
            }
        });

    }while(c.moveToNext());
}
else
    Toast.makeText(getBaseContext(), "No Profiles", Toast.LENGTH_LONG).show();
db.close();
Run Code Online (Sandbox Code Playgroud)

如何在每个texview上单独设置点击事件?在我看到它的路上,如果我在循环上创建一个click事件,click事件可能会被所有textview触发.

*更新尝试在每个循环中添加事件但是出现此错误:

"不能引用在不同方法中定义的内部类中的非final变量".

ρяσ*_*я K 7

更改代码以将OnClickListener添加到TextView

TextView tv;
     if(c.moveToFirst())
            {
                do{
                    tv = new TextView(this);
                    tv.setText(c.getString(1));
                    tv.setTextSize(18);
                    tv.setTextColor(Color.BLACK);
                    tv.setClickable(true);
                    tv.setPadding(0, 10, 0, 0);
                    tv.setGravity(Gravity.CENTER);
                    tv.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // do you work here
                     }
                    });
                    mainLayout.addView(tv);

                }while(c.moveToNext());
            }
Run Code Online (Sandbox Code Playgroud)