Made fragments work properly.
As this was my first experience with fragments, I didn't respect their lifecycle properly. I think this has solved the issue I was having, where recreating the app list fragments after it was destroid by Android caused them to stuff up.
This commit is contained in:
parent
89facb24c6
commit
4eda47df4b
@ -29,6 +29,7 @@ import android.app.*;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentActivity;
|
import android.support.v4.app.FragmentActivity;
|
||||||
|
import android.support.v4.view.PagerAdapter;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
import android.widget.*;
|
import android.widget.*;
|
||||||
@ -92,6 +93,7 @@ public class FDroid extends FragmentActivity implements OnItemClickListener,
|
|||||||
|
|
||||||
// Used by pre 3.0 devices which don't have an ActionBar...
|
// Used by pre 3.0 devices which don't have an ActionBar...
|
||||||
private TabHost tabHost;
|
private TabHost tabHost;
|
||||||
|
private AppListFragmentPageAdapter viewPageAdapter;
|
||||||
|
|
||||||
// The following getters
|
// The following getters
|
||||||
// (availableAdapter/installedAdapter/canUpdateAdapter/categoriesAdapter)
|
// (availableAdapter/installedAdapter/canUpdateAdapter/categoriesAdapter)
|
||||||
@ -149,8 +151,8 @@ public class FDroid extends FragmentActivity implements OnItemClickListener,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
super.onStart();
|
|
||||||
populateLists();
|
populateLists();
|
||||||
|
super.onStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -281,7 +283,8 @@ public class FDroid extends FragmentActivity implements OnItemClickListener,
|
|||||||
|
|
||||||
private void createViews() {
|
private void createViews() {
|
||||||
viewPager = (ViewPager)findViewById(R.id.main_pager);
|
viewPager = (ViewPager)findViewById(R.id.main_pager);
|
||||||
viewPager.setAdapter(new AppListFragmentPageAdapter(this));
|
viewPageAdapter = new AppListFragmentPageAdapter(this);
|
||||||
|
viewPager.setAdapter(viewPageAdapter);
|
||||||
viewPager.setOnPageChangeListener( new ViewPager.SimpleOnPageChangeListener() {
|
viewPager.setOnPageChangeListener( new ViewPager.SimpleOnPageChangeListener() {
|
||||||
public void onPageSelected(int position) {
|
public void onPageSelected(int position) {
|
||||||
selectTab(position);
|
selectTab(position);
|
||||||
@ -593,13 +596,15 @@ public class FDroid extends FragmentActivity implements OnItemClickListener,
|
|||||||
public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2,
|
public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2,
|
||||||
long arg3) {
|
long arg3) {
|
||||||
|
|
||||||
Fragment fragment = ((AppListFragmentPageAdapter)viewPager.getAdapter()).getItem(viewPager.getCurrentItem());
|
int currentItem = viewPager.getCurrentItem();
|
||||||
|
Fragment fragment = viewPageAdapter.getItem(currentItem);
|
||||||
|
|
||||||
// The fragment.getView() returns a wrapper object which has the
|
// The fragment.getView() returns a wrapper object which has the
|
||||||
// actual view we're interested in inside:
|
// actual view we're interested in inside:
|
||||||
// http://stackoverflow.com/a/13684505
|
// http://stackoverflow.com/a/13684505
|
||||||
AppListView view = ((AppListView)((ViewGroup)fragment.getView()).getChildAt(0));
|
ViewGroup group = (ViewGroup)fragment.getView();
|
||||||
final DB.App app = (DB.App)view.getAppList().getAdapter().getItem(arg2);
|
AppListView view = (AppListView)group.getChildAt(0);
|
||||||
|
final DB.App app = (DB.App)view.getAppList(). getAdapter().getItem(arg2);
|
||||||
|
|
||||||
Intent intent = new Intent(this, AppDetails.class);
|
Intent intent = new Intent(this, AppDetails.class);
|
||||||
intent.putExtra("appid", app.id);
|
intent.putExtra("appid", app.id);
|
||||||
|
@ -1,13 +1,18 @@
|
|||||||
package org.fdroid.fdroid.views;
|
package org.fdroid.fdroid.views;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.app.FragmentPagerAdapter;
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import org.fdroid.fdroid.FDroid;
|
import org.fdroid.fdroid.FDroid;
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
|
import org.fdroid.fdroid.views.fragments.AvailableAppsFragment;
|
||||||
|
import org.fdroid.fdroid.views.fragments.CanUpdateAppsFragment;
|
||||||
|
import org.fdroid.fdroid.views.fragments.InstalledAppsFragment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used by the FDroid activity in conjunction with its ViewPager to support
|
* Used by the FDroid activity in conjunction with its ViewPager to support
|
||||||
@ -19,28 +24,11 @@ public class AppListFragmentPageAdapter extends FragmentPagerAdapter {
|
|||||||
private Fragment[] fragments = new Fragment[3];
|
private Fragment[] fragments = new Fragment[3];
|
||||||
|
|
||||||
public AppListFragmentPageAdapter(FDroid parent) {
|
public AppListFragmentPageAdapter(FDroid parent) {
|
||||||
|
|
||||||
super(parent.getSupportFragmentManager());
|
super(parent.getSupportFragmentManager());
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
final AppListViewFactory viewFactory = new AppListViewFactory(parent);
|
fragments[0] = new AvailableAppsFragment();
|
||||||
|
fragments[1] = new InstalledAppsFragment();
|
||||||
fragments[0] = new Fragment() {
|
fragments[2] = new CanUpdateAppsFragment();
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
||||||
return viewFactory.createAvailableView();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
fragments[1] = new Fragment() {
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
||||||
return viewFactory.createInstalledView();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
fragments[2] = new Fragment() {
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
||||||
return viewFactory.createCanUpdateView();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package org.fdroid.fdroid.views;
|
package org.fdroid.fdroid.views;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.util.AttributeSet;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
@ -22,6 +23,14 @@ public class AppListView extends LinearLayout {
|
|||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AppListView(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AppListView(Context context, AttributeSet attrs, int defStyle) {
|
||||||
|
super(context, attrs, defStyle);
|
||||||
|
}
|
||||||
|
|
||||||
public void setAppList(ListView appList) {
|
public void setAppList(ListView appList) {
|
||||||
this.appList = appList;
|
this.appList = appList;
|
||||||
}
|
}
|
||||||
|
14
src/org/fdroid/fdroid/views/fragments/AppListFragment.java
Normal file
14
src/org/fdroid/fdroid/views/fragments/AppListFragment.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package org.fdroid.fdroid.views.fragments;
|
||||||
|
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import org.fdroid.fdroid.FDroid;
|
||||||
|
import org.fdroid.fdroid.views.AppListViewFactory;
|
||||||
|
|
||||||
|
public class AppListFragment extends Fragment {
|
||||||
|
|
||||||
|
protected AppListViewFactory getViewFactory() {
|
||||||
|
FDroid parent = (FDroid)getActivity();
|
||||||
|
return new AppListViewFactory(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package org.fdroid.fdroid.views.fragments;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
public class AvailableAppsFragment extends AppListFragment {
|
||||||
|
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
return getViewFactory().createAvailableView();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package org.fdroid.fdroid.views.fragments;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
public class CanUpdateAppsFragment extends AppListFragment {
|
||||||
|
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
return getViewFactory().createCanUpdateView();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package org.fdroid.fdroid.views.fragments;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
public class InstalledAppsFragment extends AppListFragment {
|
||||||
|
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
return getViewFactory().createInstalledView();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user