如何在onClick(View v)函数中访问我的对象?

时间:2011-07-05 13:08:45

标签: android

我已经定义了一个模型类:

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) }?

4 个答案:

答案 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...
                }
            }
        );
    }
}