- Forum-Beiträge: 13
23.07.2016, 22:18:38 via Website
23.07.2016 22:18:38 via Website
Hallo Community,
ich habe einen Navigation Drawer (den Standard Drawer von Google, welchen man vorgefertigt bei Android Studio bekommt) mit mehreren Fragments und ein TabLayout mit einem ViewPager. Das TabLayout und der ViewPager sind ebenfalls in einem Fragment. Die normalen Fragments werden problemlos ausgetauscht. Doch das tauschen zwischen einen normalen Fragment mit dem TabLayout und dem View Pager funktioniert nicht. Der ViewPager ist dann leer und das wischen in das nächste Fragment geht nicht mehr.
Leider finde ich den Fehler nicht. Hat jmd. eine Idee, was ich falsch mache?
Vielen Dank im Vorraus.
XML:Fragment mit TabLayout und ViewPager:
<RelativeLayout xmlns:android="---"
xmlns:tools="---"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="---"
tools:context="---">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"
android:background="#1565C0"
android:textColor="#fff" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_below="@+id/tabs" />
Java: Fragment mit TabLayout und ViewPager:
public class Startseite extends Fragment {
private TabLayout tabLayout;
private ViewPager viewPager;
WebView webView;
public Startseite() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_startseite, container, false);
}
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) view.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabTextColors(ColorStateList.valueOf(Color.WHITE));
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
adapter.addFragment(new Neu(), "NEU");
adapter.addFragment(new Wichtig(), "WICHTIG");
adapter.addFragment(new News(), "NEWS");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
XML:Erstes Fragment im ViewPager:
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="---"
xmlns:tools="---"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="---"
android:id="@+id/swipe_container_neu">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView_neu"
android:layout_gravity="center" />
JAVA:Erstes Fragment im ViewPager:
public class Neu extends Fragment {
WebView webView;
SwipeRefreshLayout swipeLayout;
ProgressBar spinner;
public Neu() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_neu, container, false);
webView = (WebView) view.findViewById(R.id.webView_neu);
webView.loadUrl("---");
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
viewx.loadUrl(urlx);
return false;
}
});
webView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return false;
}
});
swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container_neu);
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
webView.reload();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
swipeLayout.setRefreshing(false);
}
}, 5000);
}
});
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
XML:Normales Fragment im NavDrawer:
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="---"
xmlns:tools="---"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="---"
android:id="@+id/swipe_container_deutsch">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView_deutsch" />
JAVA:Normales Fragment im NavDrawer:
public class Deutsch extends Fragment {
WebView webView;
SwipeRefreshLayout swipeLayout;
public Deutsch() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_deutsch, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
webView = (WebView) view.findViewById(R.id.webView_deutsch);
webView.loadUrl("---");
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
viewx.loadUrl(urlx);
return false;
}
});
webView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return false;
}
});
swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container_deutsch);
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
webView.reload();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
swipeLayout.setRefreshing(false);
}
}, 5000);
}
});
}
MainActivity:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (findViewById(R.id.fragment_container) != null) {
if (savedInstanceState != null) {
return;
}
}
Startseite firstFragment = new Startseite();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
...
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_start) {
Startseite newFragment = new Startseite();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
...
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
— geändert am 23.07.2016, 23:07:33
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.