The issue:
I have implemented a ViewPager with Fragments. It has PagerTabStrip to display TabTitle and selecting tabs. The problem is when the app starts for first time, the swipe on screen or tap on tab does not work. The UI remains non interactive. But once the orientation changed (portrait to landscape or vice versa), the UI becomes responsive. Also the previous swipe gestured on the queue got executed. Would be grateful if you can provide some pointer to the missing element.
Below is the code:
Activity code:
public class ServicesActivity extends ActionBarActivity
{
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_services);
actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
viewPager = (ViewPager) findViewById(R.id.pager);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
//adding listeners
viewPager.setOnPageChangeListener( new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
}
Adapter code:
public class TabsPagerAdapter extends FragmentPagerAdapter
{
final int PAGE_COUNT = 4;
public TabsPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
// Top Rated fragment activity
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
case 3:
return new Fragment4();
}
return null;
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
// Top Rated fragment activity
return "Tab1";
case 1:
return "Tab2";
case 2:
return "Tab3";
case 3:
return "Tab4";
}
return null;
}
}
The container activity for pager:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.PagerTabStrip
android:id="@+id/pager_tab_strip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top" />
</android.support.v4.view.ViewPager>
</RelativeLayout>
Update:
I have tested the app on Samsung Galaxy Y (Android v 2.3.6 updated from 2.3.3) and found this issue. The issue is not there in Emulator running android 2.3.3 or on a device(tab) runnig android 4.1.2.
Update-2 The manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xyz.abc"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:theme="@style/CustomActionBarTheme" android:logo="@drawable/ic_logo_abc">
<activity android:name="xyz.abc.MainActivity"
android:label="@string/app_name_long">
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="xyz.abc.ServicesActivity"
android:label="@string/app_name_long" >
</activity>
</application>
</manifest>
Update: Log Info:
05-28 00:07:43.843: D/skia(13773): SkGL unimplemented: stroke path
05-28 00:07:43.875: W/dalvikvm(13773): VFY: unable to resolve direct method 8216: Landroid/widget/LinearLayout$LayoutParams;.<init> (Landroid/widget/LinearLayout$LayoutParams;)V
05-28 00:07:43.875: D/dalvikvm(13773): VFY: replacing opcode 0x70 at 0x0000
05-28 00:07:43.875: D/dalvikvm(13773): VFY: dead code 0x0003-0007 in Landroid/support/v7/internal/view/menu/ActionMenuView$LayoutParams;.<init> (Landroid/support/v7/internal/view/menu/ActionMenuView$LayoutParams;)V
05-28 00:07:43.929: D/BRCM_EGL(13773): eglMakeCurrent(NULL) Thread: 13773
05-28 00:07:43.929: E/BRCM_EGL(13773): eglDestroyContext() FATAL error - the context is still active but we called destroy - FIX THIS
05-28 00:07:43.929: D/BRCM_EGL(13773): eglDestroyContext() context: 0x1bf6a8, VC context: 1, Thread 13773
05-28 00:07:43.945: D/BRCM_EGL(13773): eglDestroySurface() surface: 0x1bd600, android window 0x1c7de8, Thread: 13773
05-28 00:07:48.390: E/libEGL(13773): call to OpenGL ES API with no current context (logged once per thread)
05-28 00:07:48.390: E/BRCM_EGL(13773): eglSwapBuffers() - TODO - function called but no current context is valid
05-28 00:07:48.406: E/BRCM_EGL(13773): eglSwapBuffers() - TODO - function called but no current context is valid
Already I got these same kind of problems.
If you are using emulator,then some of the emulator with targets version Android 4.4 and 2.3 have a bug check out here. Just try to change your emulator to target version 4.2 or 4.3 and then check out the orientation in manifest.
Updated Answer:
ServicesActivity.java:
package com.sit.fth.activity;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.WindowManager;
public class HomeActivity extends BaseActivity implements
VideoFragment.OnVideoSelectedListener,
AboutFragment.OnAboutFragmentSelectedListener,
AnnouncenentFragment.OnAnnouncementSelectedListener,
GalleryFragment.OnGalItemSelectedListener,
MagzineFragment.OnMagzineSelectedListener {
private ActionBar actionabar;
private ViewPager viewpager;
private LiveStreamFragment liveStreamFragment;
private AppData appData;
private FragmentManager fm;
private MyFragmentPagerAdapter fragmentPagerAdapter;
// private HomeBaseFragment fragment;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_main);
appData = ((GemsApplication) this.getApplication()).getAppData();
// AppPreferences.setAppPreferences(getApplicationContext());
actionabar = getActionBar();
actionabar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// actionabar.setHomeButtonEnabled(true);
liveStreamFragment = new LiveStreamFragment();
viewpager = (ViewPager) findViewById(R.id.pager);
fm = getSupportFragmentManager();
/** Defining a listener for pageChange */
ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
actionabar.setSelectedNavigationItem(position);
}
};
/** Setting the pageChange listner to the viewPager */
viewpager.setOnPageChangeListener(pageChangeListener);
/** Creating an instance of FragmentPagerAdapter */
fragmentPagerAdapter = new MyFragmentPagerAdapter(fm);
viewpager.setAdapter(fragmentPagerAdapter);
actionabar.setDisplayShowTitleEnabled(true);
/** Defining tab listener */
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabReselected(Tab arg0,
android.app.FragmentTransaction arg1) {
}
@Override
public void onTabSelected(Tab tab,
android.app.FragmentTransaction ft) {
viewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab,
android.app.FragmentTransaction ft) {
}
};
// Tab tab =
// actionabar.newTab().setText("My Friends").setIcon(R.drawable.myfriends).setTabListener(tabListener);
// Tab tab = actionabar.newTab().setText(getString(R.string.str_home))
// .setTabListener(tabListener);
// actionabar.addTab(tab);
Tab tab = actionabar.newTab().setText(getString(R.string.str_home))
.setTabListener(tabListener);
actionabar.addTab(tab);
tab = actionabar.newTab().setText(getString(R.string.str_video))
.setTabListener(tabListener);
actionabar.addTab(tab);
tab = actionabar.newTab().setText(getString(R.string.str_gal))
.setTabListener(tabListener);
actionabar.addTab(tab);
tab = actionabar.newTab().setText(getString(R.string.str_announcements))
.setTabListener(tabListener);
actionabar.addTab(tab);
tab = actionabar.newTab()
.setText(getString(R.string.str_magazines))
.setTabListener(tabListener);
actionabar.addTab(tab);
tab = actionabar.newTab().setText(getString(R.string.str_conduct))
.setTabListener(tabListener);
actionabar.addTab(tab);
}
}
activity_main:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>