web-dev-qa-db-fra.com

Fragment implémente OnClickListener

J'ai une application que je modernise. Une étape de ce processus consiste à passer à une présentation basée sur des fragments (à l'aide des fragments de la bibliothèque de support) . J'ai converti mes activités en fragments et la mise en page a bien fonctionné (avec un ViewPager, des trucs sympas!)

J'avais mes activités implémenter OnClickListener pour tous mes besoins pressants. Les nouvelles incarnations de Fragment font la même chose bien sûr, mais il semble que "onClick" ne soit jamais touché. Y a-t-il quelque chose de spécial dans les fragments qui les empêche de fonctionner de cette façon?

15
Nick

Il suffit de faire un ceci 

public class fragmentOne extends Fragment implements OnClickListener {
    Button myButton;

    @Override
    public View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedinstanceState) {
        View myView = inflater.inflate(R.layout.fragment_1, container, false);
        myButton = (Button) myView.findViewById(R.id.myButton);
        myButton.setOnClickListener(this);
        return myView;
    }

    @Override
    public void onClick(View v) {
        // implements your things
    }
}

très simple

38
Abhijit Chakra

Je vais me concentrer pour utiliser l'action OnClick pour un accès global. Vous devez faire comme ceci est votre projet. Vous devez implémenter le View.OnClickListener , puis remplacer la méthode. OnClick () , In OnCreateView () doit faire comme ceci button_submit.setOnClickListener (this); pour les vues dont vous avez besoin, Veuillez voir le code ci-dessous pour une réponse claire, merci.

public class New_Project extends Fragment implements View.OnClickListener{

                private View mView;
                private EditText edttxt_projectname;
                private Button button_submit;

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

                    mView = inflater.inflate(R.layout.fragment_newproject, container,false);
                    edttxt_projectname=(EditText)mView.findViewById(R.id.edttxt_projectname);
                    button_submit=(Button)mView.findViewById(R.id.button_submit);

                    button_submit.setOnClickListener(this);

                    return mView;
                }


                @Override
                public void onClick(View v) {
                    switch (v.getId()) {
                    case R.id.button_submit:
                        edttxt_projectname.setText("Test Submit!#@%!#%");
                        break;
                default:
                        break;
                    }

                }
    }
9
MohanRaj S

Je veux commenter la réponse de Abhijit Chakra, mais il me semble que je dois avoir 50 représentants pour cela. Pour ceux qui se demandent si vous ne pouvez pas utiliser la réponse d'Abhijit, c'est à cause de:

public void OnClick(View v) {
    // implements your things
}

Vous devez vous assurer qu'il est onClick, PAS OnClick. Heureusement, le message d'erreur interne d'Android Studio est venu à la rescousse.

2
view.setOnLongClickListener(new View.OnLongClickListener() {
  @Override
  public boolean onLongClick(View v) {
    switch (v.getId()) {
      case R.id.imgView1:
        Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
        updateImage();
        break;
      case R.id.imgView2:
        Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
        updateImage();
        break;
      case R.id.imgView3:
        Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
        updateImage();
        break;
      default:
        break;
    }
1
lallu Sukendh