2017-05-02 2 views
0

Ich habe eine Methode wie diese in einer gemeinsamen Klasse, um Ansichten zu erstellen, wo immer ich will.So legen Sie OnClickListener in einer Ansicht fest

Die Ansichten werden korrekt erstellt, aber ich muss auch einen Listener hinzufügen, wenn auf dieses Layout geklickt wird.

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

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

Mein Versuch:

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

     } 
    }); 

Aber es ist imposible getSupportFragmentManager zu bekommen(); weil diese Klasse keine Aktivität oder ein Fragment ist (und es muss auch keines sein)

Also, meine Frage ist, wie kann ich das tun?

Ich habe auch den Code in einem der Teile des Codes geschrieben, in dem ich die ArticleView-Klasse ... Dies ist ein Fragment, so dass meiner Meinung nach hier der Code funktionieren sollte.

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

Und Artikel ist ..

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

Aber die App eingeben nicht im 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(); 
} 

Danke für die Hilfe

Antwort

0

Sie nicht getSupportFragmentManager() bekommen weil du kein Activity hast. Sie sollten den Code, der in der onClick() passiert, an eine Activity delegieren, damit Sie bekommen, was Sie brauchen.

Um alle anderen Beiträge zu beantworten. OP können die FragmentManager nicht bekommen, wie Sie mit vorgeschlagen:

MainActivity.this.getSupportFragmentManager(); 

Da ArticleViews keine Aktivität ist.

+0

Wenn ich den Code im Fragment delegiere (in der while-Schleife), funktioniert der onClickListener nicht – aserrin55

+0

Ich habe einige Änderungen am OP vorgenommen. Ich verstehe deine Antwort, aber in dem Fragment funktioniert der Code nicht. Das Log.i wird beispielsweise nicht ausgeführt. – aserrin55

+0

Etwas bitte? – aserrin55

Verwandte Themen