2016-05-15 12 views
-2

Ich habe das gesucht, aber ich habe nichts gefunden, das mir helfen könnte. Ich habe eine Hauptaktivität mit 2 Fragmenten, die ich als Tabs in meiner Symbolleiste benutze. Gibt es eine Möglichkeit, ein ImageButton von einem Fragment in meiner MainActivity mit einer anderen Aktivität zu verbinden. Ich weiß, wie man Aktivität mit Aktivität durch ein Bildbuttom verbindet, ich weiß einfach nicht, wie man es aus Fragment-> Aktivität macht. Vielen Dank.ImageButton on Fragment, das zu einer anderen Aktivität geht. Android Studio

Ich habe eine Bildschaltfläche auf meinem Fragment, und ich möchte eine Aktivität öffnen, wenn ich diesen ImageButton drücke.

public class Movies extends Fragment { 


    public Movies() { 
     // Required empty public constructor 
    } 
    ImageButton imageButton2; 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_movies, container, false); 
     imageButton2 = (ImageButton) findViewById(R.id.imageButton2); 

     imageButton2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intentLoadNewActivity = new Intent(Movies.this, Activity_Civil_War.class); 
       startActivity(intentLoadNewActivity); 
      } 
     }); 

    } 

} 

Ich bekomme viele Fehler. Ich habe auch versucht, es in der MainActivity zu tun, aber ich bekomme die Null-Objekt Ausnahme.

MainActivity Klasse:

public class MainActivity extends AppCompatActivity { 
    Toolbar toolbar; 
    TabLayout tabLayout; 
    ViewPager viewPager; 
    view_pager_adapter viewPagerAdapter; 
    ImageButton imageButton2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     toolbar=(Toolbar)findViewById((R.id.toolBar)); 





     tabLayout=(TabLayout)findViewById((R.id.tabLayout)); 
     viewPager=(ViewPager)findViewById((R.id.ViewPager)); 
     viewPagerAdapter = new view_pager_adapter(getSupportFragmentManager()); 
     viewPagerAdapter.addFragments(new Showcase(),"Showcase"); 
     viewPagerAdapter.addFragments(new Movies(),"Movie List"); 
     viewPagerAdapter.addFragments(new Menu(),"Menu"); 
     viewPagerAdapter.addFragments(new Login(),"Login"); 

     viewPager.setAdapter(viewPagerAdapter); 
     tabLayout.setupWithViewPager(viewPager); 


    } 
} 
+0

Können Sie zeigen, was Sie bisher getan haben? Code von deinen Fragmenten. Und präzisieren Sie auch, was Sie erreichen möchten. Möchten Sie eine neue Aktivität aus einem Fragment heraus starten? – Gauthier

+0

Ich habe mit meinem Code bearbeitet. Ja, ich möchte eine neue Aktivität von meinem Fragment starten. –

Antwort

1

Nur wenige Dinge zuerst:

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

Wenn Ihre Rückkehr hier ein Wert, der Rest des Codes unten wird es nicht aufgerufen werden. Was Sie tun müssen, ist, einen Verweis darauf zu behalten und es am Ende Ihrer Methode zurückzugeben.

Dann

Intent intentLoadNewActivity = new Intent(Movies.this, Activity_Civil_War.class); 

Ich gehe davon aus, dass Filme ein Fragment ist und Activity_Civil_War ist eine Aktivität (korrigiert mich wenn ich falsch liege).

Es gibt keinen Konstruktor in der Intent-Klasse, der ein Fragment als Parameter akzeptiert. Was Sie versuchen, indem Sie 'dies' aufrufen, ist einen Kontext zu bekommen. In einem Fragment können Sie dies tun, indem getActivity Aufruf()

Wenn wir die Dinge zusammenzufassen erhalten wir:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_movies, container, false); 
    imageButton2 = (ImageButton) findViewById(R.id.imageButton2); 

    imageButton2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intentLoadNewActivity = new Intent(getActivity(), Activity_Civil_War.class); 
      startActivity(intentLoadNewActivity); 
     } 
    }); 
    return view; 
} 
+0

Danke !! Es klappt. –