我根据从数据库中检索到的记录动态创建可点击的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();
如何在每个texview上单独设置点击事件?在我看到它的路上,如果我在循环上创建了一个click事件,那么click事件可能会被所有textview触发。
*更新尝试在每个循环中添加事件但是出现此错误:
“不能引用在不同方法中定义的内部类中的非final变量”。
答案 0 :(得分: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());
}
答案 1 :(得分:4)
使用此
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);
tv.setId(1)
tv.setOnClickListner(this);
mainLayout.addView(tv);
}while(c.moveToNext());
并按如下所示放置onClick方法
@Override
public void onClick(View v)
{
if(v.getId()==1)
{
// do stuf here
}
}
答案 2 :(得分:0)
在我看到它的路上,如果我在循环上创建了一个点击事件,则点击事件可能会被所有文字视图触发。
=>怎么可能?仅当触发点击操作时,仅当触发点击操作时,将触发点击evnet代码。所以像往常一样分配setOnClickListener
。
do {
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
} while(c.moveToNext())
答案 3 :(得分:0)
如果休息一切都比你应该
试试这个
tv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(getBaseContext(), ((TextView)v).getText().toString(), Toast.LENGTH_LONG).show();
}
});
希望有所帮助
答案 4 :(得分:0)
以这种方式使用......
tv.setOnClickListener(new OnClickListener()
{
public void onClick(View voew)
{
TableRow t = (TableRow) voew; //Your Layout
TextView firstTextView = (TextView) t.getChildAt(0);
String firstText = firstTextView.getText().toString();
}
});