OnClick na button z innego layoutu

0

Witam serdecznie !
Mam Moje główne Activity, które tworzy obiekt klasy rozszerzonej o PagerAdapter, która odpowiada za przesuwanie widoków na ekranie w prawo i lewo. Podczas przesuwania do widoku dodaje layout (jeden z czterech, które utworzyłem). Potrzebuję, abym mógł używać elementów layoutów, które wyświetlają się na ekranie. Aby używać przycisków z innego layoutu niż ten, który jest ustawiony na content Acitivity, napisałem taki kod:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPagerAdapter adapter = new ViewPagerAdapter(this);
        ViewPager myPager = (ViewPager) findViewById(R.id.pager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(0);

        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = vi.inflate(R.layout.zadania_do_zrobienia, null);
        
        mDropdownFoldOutMenu = ((LinearLayout) v.findViewById(R.id.dropdown_foldout_menu));
        mDropdownTitle = ((TextView) v.findViewById(R.id.dropdown_textview));

        final TextView dropDownTextView = (TextView) v.findViewById(R.id.dropdown_textview);
        final TextView alt0 = (TextView) v.findViewById(R.id.dropdown_alt0);
        final TextView alt1 = (TextView) v.findViewById(R.id.dropdown_alt1);
        final TextView alt2 = (TextView) v.findViewById(R.id.dropdown_alt2);
        
        Button button = (Button)v.findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				String xx = "sss";
			}
		});

Oczywiście debuger nie wchodzi do onClicka buttona kiedy klikam w przycisk.
Co robię źle? Jak to powinno prawidłowo wyglądać?
Uczę się pisać na androida i właśnie tu utknąłem :)

Pozdrawiam

0

To nie ma żadnego sensu. Widok v nie jest dodany do żadnego kontenera- "rodzica" w głównym layoucie więc to nie będzie działać. Czym jest dokładnie ten widok, gdzie on się ma znajdować?

0

Uzupełnie jeszcze Swoją wypowiedź kodem z PageAdaptera, który zmienia widok.

 public Object instantiateItem(View collection, int position) {
	 LayoutInflater vi = (LayoutInflater) activity.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	 if(position==0)
		 v = vi.inflate(R.layout.zadania_do_zrobienia, null);
	 if(position==1)
		 v = vi.inflate(R.layout.zadanie_pojedyncze, null);
	 if(position==2)
		 v = vi.inflate(R.layout.zadania_zrobione, null);
	 if(position==3)
		 v = vi.inflate(R.layout.ekwipunek, null);
	 ((ViewPager) collection).addView(v, 0);
	 return v;
 }

Może nie napisałem tego tak jak powinno się to robić, po prostu do takiego rozwiązania sam doszedłem i szukam poprawnego ;p
Chciałbym móc używać przycisków i innych elementów tych layoutów w głownym Activity, z którego tworzę obiekt PageAdaptera.

0

No to chcąc mieć reakcje na wciśnięcie przycisku, który się znajduje w ViewPager musisz użyć metody findViewById w metodzie instantiateItem:

 public Object instantiateItem(View collection, int position) {
     LayoutInflater vi = (LayoutInflater) activity.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     if(position==0)
         v = vi.inflate(R.layout.zadania_do_zrobienia, null);
         v.findViewById(R.id.twoj_przycisk).setOnClickListener(....);
         ... jakieś inne działania na widoku
        
     if(position==1)
         v = vi.inflate(R.layout.zadanie_pojedyncze, null); // tutaj to samo jeżeli chcesz mieć reakcje na np. wciśnięcie przycisku albo chcesz zmienić tekst
     if(position==2)
         v = vi.inflate(R.layout.zadania_zrobione, null); //itd...
     if(position==3)
         v = vi.inflate(R.layout.ekwipunek, null);
     ((ViewPager) collection).addView(v, 0);
     return v;
 }
1

Kolejna sprawa, trochę oszczędniej będzie tworzyć LayoutInflater tylko raz w konstruktorze adaptera za pomocą metody

inflater = LayoutInflater.from(activity) 
//albo
inflater = activity.getLayoutInflater();
0

Pięknie Mi to wyjaśniłeś, w sumie nie wiem czemu na to nie wpadłem :)
Co do inflatera zrobię tak jak prawisz :P

Dziękuję Ci bardzo za pomoc! Już się spodziewałem komentarzy typu "Za łopatę się weź a nie programowanie!" :D .

Swoją drogą polecałbyś jakąś książkę, z której mógłbym się podszlifować i uzupełnić wiedzę? Bo póki co to bawię się, programuję, ale na zasadzie wpisz w google "Jak zrobić to czy tamto" i próbuję.

Pozdrawiam Serdecznie !

1

Wszystko zależy od stopnia znajomości angielskiego, polecam http://commonsware.com/ (za ok 100 zł masz roczną subskrypcję na książkę, która jest aktualizowana co miesiąc, jest to na chwilę obecną najbardziej kompletne i dokładne źródło wiedzy). Książka ma obecnie prawie 3000 stron, tutaj jest kod źródłowy do niej https://github.com/commonsguy/cw-omnibus. Sam autor jest znany jako specjalista od tematu androida. Twoja metoda typu: szukam w google i próbuję też jest bardzo dobra, na wszystko po prostu potrzeba czasu (jedni potrzebują go mniej, inni więcej, istotne żeby się nie poddawać).

1 użytkowników online, w tym zalogowanych: 0, gości: 1