我已经定义了一个模型类:
public class MyObject {
...
}
在我的活动中,我从SERVICE层获取此对象。此时一切正常,我唯一的问题是,在Activity中,如果我将 setOnClickListener 设置为 TextView ,我该如何访问 myObject ?我的意思是在以下代码中显示:
//my custom object
MyObject obj = SERVICE.getObject();
TextView tx = new TextView(this);
tx.setText("Click me");
tx.setOnClickListener(
new OnClickListener(){
@Override
public void onClick(View v){
//how to access obj here?
}
}
);
在上面的代码中,我无法访问obj
函数内的onClick(View v)
,如何删除它以访问obj
onClick(View v)
}?
答案 0 :(得分:2)
将MyObject obj
标记为final
。
final MyObject obj = SERVICE.getObject();
TextView tx = new TextView(this);
tx.setText("Click me");
tx.setOnClickListener(
new OnClickListener(){
@Override
public void onClick(View v){
obj.doStuff(); //this should work now...
}
}
);
答案 1 :(得分:1)
如果您有ID,可以在标记字段中设置该ID并在onclick中检索它:
tx.setTag(obj.getId());
tx.setOnClickListener(
new OnClickListener(){
@Override
public void onClick(View v){
Long id = v.getTag();
}
}
);
您可以存储任意对象,因此您可以将整个对象存储在那里。
答案 2 :(得分:0)
将您的对象设置为最终,然后您就可以访问它了。
答案 3 :(得分:0)
有一种更简单的方法:
class testClass
{
testClass obj;
public testClass() {
obj=this;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView tx = new TextView(this);
tx.setText("Click me");
tx.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
obj.doStuff(); //this should work now...
}
}
);
}
}