Необходимо обработать щелчок из класса NON-Activity (.java)

У меня есть один основной класс активности, который содержит огромное количество кода/данных. Поэтому я хочу сделать его коротким и читаемым, поэтому я хочу создать один .java файл, который обрабатывает некоторые функции в соответствии с требованием. Как

Button b=(Button)findviewById(R.id.b1);
b.setOnClickListener(this);

и показать тост из класса неактивности. Итак, мой вопрос: как обрабатывать/инициализировать кнопку в неактивности? Можем ли мы получить идентификатор из "Передача контекста" из "Активность" в класс неактивности?

Ответ 1

Попробуйте работать для меня. Также может помочь вам!

NonActivityClass:

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();

            }
        });
    }
}

MainActivity:

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();
    }
}

Ответ 2

Да, вы можете сделать это, реализовав OnClickListener в своем другом классе Java и назовите это в своем классе активности, для этого сделайте вот это

Button b=(Button)findviewById(R.id.b1);
b.setOnClickListener(new NonActivityClass(this));

Мы передаем контекст активности в NonActivityClass, это позволит вам получить доступ к вашему компоненту пользовательского интерфейса в NonActivityClass, но помните, что это может привести к утечке памяти;

И реализовать OnClickListener как:

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

Ответ 3

Вы можете просто реализовать свой onclick-прослушиватель в своем основном классе, но используйте интерфейс для экстернализации содержимого слушателя в другом классе.

Пример:

Создайте класс 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()