Swipes mit Tabs, Fragmente lassen keine Listener zu

  • 2 Antworten
  • Letztes Antwortdatum
P

PhoenixRising

Neues Mitglied
0
Hallo leute, ich ganz neu hier und auch wenn ich gut bewandert mit Englisch bin, komme ich gerade einfach nicht mehr weiter. Ich habe eine Actvitiy in der ich Swipes mit einem TabListener eingebaut habe und einen FragmentPagerAdapter, da ich nur 4 Fragmente habe durch die hindurch geswipte werden soll.

Hier die Acitity:
Code:
public class MainActivity extends FragmentActivity {
    // Elemente für die Swipes und Fragments
    ActionBar actionbar;
    ViewPager viewpager;
    FragmentPageAdapter ft;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewpager = (ViewPager) findViewById(R.id.pager);

        ft = new FragmentPageAdapter(getSupportFragmentManager());

        // Swipe-Elemente
        final ActionBar actionbar = getActionBar();
        viewpager.setAdapter(ft);
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.TabListener tabListener = new ActionBar.TabListener() {
            @Override
            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                viewpager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTabReselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }
        };
        actionbar.addTab(actionbar.newTab().setText("Messe").setTabListener(tabListener));
        actionbar.addTab(actionbar.newTab().setText("Anschrift").setTabListener(tabListener));
        actionbar.addTab(actionbar.newTab().setText("Brands").setTabListener(tabListener));
        actionbar.addTab(actionbar.newTab().setText("Details").setTabListener(tabListener));
        viewpager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                actionbar.setSelectedNavigationItem(arg0);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });
    }
    }
}

Hier der FragmentPagerAdapter:

Code:
public class FragmentPageAdapter extends FragmentPagerAdapter {
   
    public FragmentPageAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int arg0) {
        switch (arg0) {
        case 0:
            return new MesseSetter();           
        case 1:
            return new Anschrift();
        case 2:
            return new Brands();
        case 3:
            return new Details();
        }
        return null;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 4;
    }

}

Hier das erste der 4 Fragmente, ich will mit einem TextWatcher den Titel der App ändern:
Code:
public class MesseSetter extends Fragment {
    // EditTexts
    EditText e_messeName;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View fragLayout = inflater.inflate(R.layout.activity_main, null);

        // Elemente - Deklaration
        e_messeName = (EditText) fragLayout.findViewById(R.id.input_messename);
       
    e_messeName.addTextChangedListener(new TextWatcher() {
       
       @Override
       public void onTextChanged(CharSequence s, int start, int before, int count) {
         // TODO Auto-generated method stub
         
       }
       
       @Override
       public void beforeTextChanged(CharSequence s, int start, int count, int after) {
         // TODO Auto-generated method stub
         
       }
       
       @Override
       public void afterTextChanged(Editable s) {
         //blablabla Mr.Freeman...
         //Namen Ändern
       }
     });
        return inflater.inflate(R.layout.messesetter, container, false);
    }

}

Wenn ich die Zeile e_messeName.addTextChangedListener entferne geht es wieder, ich hatte fast ads gleiche problem mit einer RadioGroup weshalb ich glaube das es mit den Callbacks zutun hat. Leider komme ich auf keine Lösung, bin auch noch nciht so erfahren mit den Swipes und Fragments, ich hatte gedacht das ich bereits exsisteirende Instanzen der Fragmente nehmen sollte damit sie nicht erst zur Laufzeit instanzieiert werden, hab in die richtung auch ein bisschen rum probiert aber ich kriege es einfach nicht gebacken.
 
Hallo,
setz mal alles was die gestures blockt (blocken kann) auf "focusable=false" "focusableInTouchMode=false"... wenn das nichts bringt, müsstest du ansonsten das touchevent anderweitig eine ebene weiter durchreichen. So jedenfalls meine Vermutung auf die Schnelle.

Btw:wenn man was überschreibt, muss man auch dafür sorgen, dass die Interaktionen abgegriffen werden.

Beispiel:
Code:
    @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            int tabStripChildCount = mTabStrip.getChildCount();
            if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
                return;
            }

            mTabStrip.onViewPagerPageChanged(position, positionOffset);

            View selectedTitle = mTabStrip.getChildAt(position);
            int extraOffset = (selectedTitle != null)
                              ? (int) (positionOffset * selectedTitle.getWidth())
                              : 0;

            scrollToTab(position, extraOffset);

            if (mViewPagerPageChangeListener != null) {
                mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }
        }
 
Zuletzt bearbeitet:
Hi und vielen vielen dank das du dich meiner Angenommen hast!!
Ich habe das Problem gefunden. Es hatte rein gar nichts damit zu tun, ich war einfach nur zu voreilig als ich die Fragmente Angelegt habe und habe den falschen View zuruck gegeben.

Code:
 final View fragLayout = inflater.inflate(R.layout.activity_main, null);

        // Elemente - Deklaration
        e_messeName = (EditText) fragLayout.findViewById(R.id.input_messename);
      
    e_messeName.addTextChangedListener(new TextWatcher() {
      
       @Override
       public void onTextChanged(CharSequence s, int start, int before, int count) {
         // TODO Auto-generated method stub
        
       }
      
       @Override
       public void beforeTextChanged(CharSequence s, int start, int count, int after) {
         // TODO Auto-generated method stub
        
       }
      
       @Override
       public void afterTextChanged(Editable s) {
         //blablabla Mr.Freeman...
         //Namen Ändern
       }
     });
        return inflater.inflate(R.layout.messesetter, container, false);
    }

Der View fragLayout muss inflater.inflate(R.layout.messesetter, container, false) sein, ich habe die ganze zeit einen view angelegt den ich gar nicht übergebe -.- manchmal ist es das unwarscheinlichste ... aber ich danke dir vielmals!
 
Zuletzt bearbeitet:
Zurück
Oben Unten