需要处理来自非活动(.java)类的单击

需要处理来自非活动(.java)类的单击,java,android,Java,Android,我有一个主要的活动类,它包含大量的代码/数据。所以我想让它简短易读,所以我想创建一个.java文件,根据需要处理一些功能。像 Button b=(Button)findviewById(R.id.b1); b.setOnClickListener(this); 并展示非活动课上的祝酒词。 所以我的问题是如何在非活动状态下处理/初始化按钮? 我们可以通过将上下文从活动类传递到非活动类来获取id吗?是的,您可以通过在其他java类中实现OnClickListener来实现这一点,并为此在活动类中调

我有一个主要的活动类,它包含大量的代码/数据。所以我想让它简短易读,所以我想创建一个.java文件,根据需要处理一些功能。像

Button b=(Button)findviewById(R.id.b1);
b.setOnClickListener(this);
并展示非活动课上的祝酒词。 所以我的问题是如何在非活动状态下处理/初始化按钮?
我们可以通过将上下文从活动类传递到非活动类来获取id吗?

是的,您可以通过在其他java类中实现OnClickListener来实现这一点,并为此在活动类中调用它

Button b=(Button)findviewById(R.id.b1);
b.setOnClickListener(new NonActivityClass(this));
我们正在将活动上下文传递给非活动类这将使您可以在非活动类中访问UI组件,但请记住这可能会导致内存泄漏

并实现如下功能:

public class NonActivityClass implements OnClickListener 
{
    void onClick(View oView)
    {
        // Do your stuff here
    }
}

您可以只在主类中实现onclick侦听器,但可以使用接口将侦听器的内容外部化到其他类中

示例:

public class NonActivityClass {

    Context context;
    View v;
    public NonActivityClass(Context context, View v) {
        this.context = context;
        this.v = v;
    }

    public void test() {
        Button btn = (Button) v.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(context, "Hello I am inside Non Activity Class",
                        1).show();

            }
        });
    }
}
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View v = getLayoutInflater().inflate(R.layout.activity_main, null);
        setContentView(v);
        NonActivityClass nac = new NonActivityClass(MainActivity.this, v);
        nac.test();
    }
}
创建一个包含构造函数、多个方法和对象的类ManageClick.java

属性

public OnClickListenerCustom _onClickListenerCustom;
和一个接口

Interface OnClickListenerCustom{
    public void onclick();
    public void onItemClick();
}
还有另一种方法,如setOnClickListenerCustom:

public void setOnClickListenerCustom(OnClickListenerCustom listener){
    this._onClickListenerCustom = listener;
}
在主类MainActivity.java中实现onclick()方法,在oncreate中设置侦听器:

public ManageClick _clickManager;

_clickManager = new ManageClick();
_clickManager.setOnClickListener((OnClickListenerCustom) this.MainActivity);
要在onclick方法中完成,只需调用

_clickManager.onClick() or _clickManager.onItemClick()

试试这是为我工作的。也可以帮助你

非活动类:

public class NonActivityClass {

    Context context;
    View v;
    public NonActivityClass(Context context, View v) {
        this.context = context;
        this.v = v;
    }

    public void test() {
        Button btn = (Button) v.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(context, "Hello I am inside Non Activity Class",
                        1).show();

            }
        });
    }
}
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View v = getLayoutInflater().inflate(R.layout.activity_main, null);
        setContentView(v);
        NonActivityClass nac = new NonActivityClass(MainActivity.this, v);
        nac.test();
    }
}
main活动:

public class NonActivityClass {

    Context context;
    View v;
    public NonActivityClass(Context context, View v) {
        this.context = context;
        this.v = v;
    }

    public void test() {
        Button btn = (Button) v.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(context, "Hello I am inside Non Activity Class",
                        1).show();

            }
        });
    }
}
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View v = getLayoutInflater().inflate(R.layout.activity_main, null);
        setContentView(v);
        NonActivityClass nac = new NonActivityClass(MainActivity.this, v);
        nac.test();
    }
}

@Geettaunk很高兴它帮助了你:)