Невозможно использовать onClickListener внутри фрагмента - PullRequest
0 голосов
/ 23 июня 2018

Я пытаюсь запустить OnclickListener внутри фрагмента, чтобы выполнить некоторую задачу в родительском действии. Но по какой-то причине код внутри метода слушателя не имеет никакого эффекта. Ни тост, ни журнал не отображаются. Я не совсем уверен, как прикрепить слушателя к кнопке, поэтому при реализации интерфейса View.OnclickListener, так что, возможно, я что-то там пропустил. Пожалуйста, помогите.

Активность родителей:

package app2.tarun.com.fragments2;


import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AdminPanel extends AppCompatActivity implements 
FragmentChangePassword.OnButtonClickedListener{

private String password, c_password;
EditText et_password, et_c_password;
DataBaseHelper db;
Button btn_change_password;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.admin_panel);
    btn_change_password = findViewById (R.id.btn_changePassword);
    et_password =  findViewById (R.id.admin_input_password);
    et_c_password =  findViewById (R.id.admin_input_reEnterPassword);
    db=  new DataBaseHelper (this);

}


public void changeFragment(View view) {
    Fragment fragment;

    if (view == findViewById (R.id.register)) {
        fragment = new FragmentRegisterUser ();
        FragmentManager fm = getSupportFragmentManager ();
        FragmentTransaction ft = fm.beginTransaction ();
        ft.replace (R.id.fragment, fragment);
        ft.commit ();
    }

    if (view == findViewById (R.id.change_password)) {

        Log.e("mmmmmmmmmm","ssssssssss");
        Toast.makeText (this, "Hello", Toast.LENGTH_LONG).show ();

        fragment = new FragmentChangePassword ();
        FragmentManager fm = getSupportFragmentManager ();
        FragmentTransaction ft = fm.beginTransaction ();
        ft.replace (R.id.fragment, fragment);
        ft.commit ();
    }


}



@Override
public void onButtonClicked() {
    Log.e("mmmmmmmmmm","ssssssssss");
    Toast.makeText (this, "vdsfds", Toast.LENGTH_LONG).show ();
    password = et_password.getText ().toString ();
    c_password = et_c_password.getText ().toString ();
    if (password.equals (c_password)) {
        db.changePassword (password);
        finish ();
    } else
        Toast.makeText (this, "vdsfds", Toast.LENGTH_LONG).show ();
}

}

Фрагмент Действия:

package app2.tarun.com.fragments2;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class FragmentChangePassword extends Fragment implements View.OnClickListener {



OnButtonClickedListener mCallback;
Button btn_change_password;




@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    return inflater.inflate(R.layout.fragment_fragment_change_password, container, false);

}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated (view, savedInstanceState);

    mCallback = (OnButtonClickedListener) getActivity ();
    btn_change_password = getActivity ().findViewById (R.id.btn_changePassword);


}

@Override
public void onClick(View view) {
    Log.e("mmmmmmmmmm","ssssssssss");
    if(view.getId ()==R.id.btn_changePassword) {
        mCallback.onButtonClicked ();
    }
}


public interface OnButtonClickedListener {
    void onButtonClicked();
}

}

1 Ответ

0 голосов
/ 23 июня 2018

Я не совсем уверен, как подключить слушателя к кнопке, поэтому при реализации интерфейса View.OnclickListener, поэтому, возможно, я что-то там пропустил

Когда вы реализуете View.OnclickListener на фрагменте, вам также нужно настроить слушателя на просмотр.

Вам нужно сделать что-то вроде этого:

btn_change_password.setOnClickListener(this);

this ссылается на фрагмент, который уже реализует View.OnclickListener

В случае вашей активностиЯ подозреваю, что вы используете android:onClick в XML для Activity.Итак, когда у вас есть что-то вроде этого в вашем XML:

<Button
    ...
    android:onClick="changeFragment">

</Button>

Ваш клик будет работать, потому что у вас есть следующий метод в вашей деятельности:

public void changeFragment(View view) {
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...