2017-05-02 4 views
0

J'ai une méthode comme celle-ci, dans une classe commune afin de créer des vues où je veux.Comment définir OnClickListener dans une vue

Les vues sont en cours de création correctement mais je dois également ajouter un écouteur lorsque cette disposition est cliquée.

public class ArticleViews { 
    public LinearLayout getTinyView(final Context cont){ 

    //Main layout 
    LinearLayout x = new LinearLayout(cont); 
    .... 

Ma tentative:

x.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ArticleTools.selectedArticle = art; 
      Fragment art = new ArticleDetailsFragment(); 

      FragmentManager fragmentManager = ¿?¿?¿?getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.include_main, art); 
      fragmentTransaction.commit(); 

     } 
    }); 

Mais il est imposible pour obtenir getSupportFragmentManager(); parce que cette classe n'est pas une activité ou un fragment (et il ne doit pas être un)

Alors, ma question est, comment puis-je faire cela?

J'ai également écrit le code dans l'une de ces parties du code dans lequel j'appelle la classe ArticleView ... Ceci est un fragment, donc à mon avis, le code devrait fonctionner.

while(it2.hasNext()){ 
        DataSnapshot ds = it2.next(); 
        Articulo a = ds.getValue(Articulo.class); 
        a.setUserId(usuerId); 
        ArticleViews av = new ArticleViews(a); 
        av.getTinyView(getContext()). 
setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          setClickListenerToView(); 
         } 
        }); 
        articles.add(av); 
       } 

Et articles est ..

final ArrayList<ArticleViews> articles = new ArrayList<>(); 

Mais l'application ne pénètre pas dans le code

public void setClickListenerToView(){ 
    Log.i("OnClick", "enter"); 
    Fragment art = new ArticleDetailsFragment(); 
    FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.include_main, art); 
    fragmentTransaction.commit(); 
} 

Merci pour l'aide

Répondre

0

Vous ne pouvez pas obtenir getSupportFragmentManager() parce que vous n'avez pas de Activity. Vous devez déléguer le code qui se produit dans le onClick() à un Activity afin que vous puissiez obtenir ce dont vous avez besoin.

Pour répondre à tous les autres messages. OP ne peut pas obtenir le FragmentManager comme vous le suggérez avec:

MainActivity.this.getSupportFragmentManager(); 

Parce que ArticleViews est pas une activité.

+0

Lorsque je délègue le code dans le fragment (dans la boucle while), onClickListener ne fonctionne pas – aserrin55

+0

J'ai effectué quelques modifications dans l'OP. Je comprends votre réponse mais dans le fragment le code ne fonctionne pas. Le fichier Log.i n'est pas en cours d'exécution, par exemple. – aserrin55

+0

Quelque chose s'il vous plaît? – aserrin55