WIP: Refactoring fragments to handle click events themselves.

This commit is contained in:
Peter Serwylo 2013-04-11 11:03:44 +10:00
parent 4eda47df4b
commit ff4ba92376
7 changed files with 112 additions and 94 deletions

View File

@ -604,7 +604,7 @@ public class FDroid extends FragmentActivity implements OnItemClickListener,
// http://stackoverflow.com/a/13684505 // http://stackoverflow.com/a/13684505
ViewGroup group = (ViewGroup)fragment.getView(); ViewGroup group = (ViewGroup)fragment.getView();
AppListView view = (AppListView)group.getChildAt(0); AppListView view = (AppListView)group.getChildAt(0);
final DB.App app = (DB.App)view.getAppList(). getAdapter().getItem(arg2); 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);

View File

@ -26,9 +26,9 @@ public class AppListFragmentPageAdapter extends FragmentPagerAdapter {
public AppListFragmentPageAdapter(FDroid parent) { public AppListFragmentPageAdapter(FDroid parent) {
super(parent.getSupportFragmentManager()); super(parent.getSupportFragmentManager());
this.parent = parent; this.parent = parent;
fragments[0] = new AvailableAppsFragment(); fragments[0] = new AvailableAppsFragment().setAppListAdapter(parent.getAvailableAdapter());
fragments[1] = new InstalledAppsFragment(); fragments[1] = new InstalledAppsFragment().setAppListAdapter(parent.getInstalledAdapter());
fragments[2] = new CanUpdateAppsFragment(); fragments[2] = new CanUpdateAppsFragment().setAppListAdapter(parent.getCanUpdateAdapter()).;
} }
@Override @Override

View File

@ -1,80 +0,0 @@
package org.fdroid.fdroid.views;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Spinner;
import org.fdroid.fdroid.AppListAdapter;
import org.fdroid.fdroid.FDroid;
import org.fdroid.fdroid.R;
/**
* Provides functionality to create the three lists of applications
* required for the FDroid activity.
*/
public class AppListViewFactory {
private FDroid parent;
public AppListViewFactory(FDroid parent) {
this.parent = parent;
}
public AppListView createAvailableView() {
AppListView view = new AppListView(parent);
view.setOrientation(LinearLayout.VERTICAL);
Spinner spinner = new Spinner(parent);
// Giving it an ID lets the default save/restore state
// functionality do its stuff.
spinner.setId(R.id.categorySpinner);
spinner.setAdapter(parent.getCategoriesAdapter());
spinner.setOnItemSelectedListener(parent);
view.addView(
spinner,
new ViewGroup.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
ListView list = createAppListView(parent.getAvailableAdapter());
view.setAppList(list);
view.addView(
list,
new ViewGroup.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
return view;
}
public AppListView createInstalledView() {
return createPlainAppList(parent.getInstalledAdapter());
}
public AppListView createCanUpdateView() {
return createPlainAppList(parent.getCanUpdateAdapter());
}
protected AppListView createPlainAppList(AppListAdapter adapter) {
AppListView view = new AppListView(parent);
ListView list = createAppListView(adapter);
view.addView(
list,
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
view.setAppList(list);
return view;
}
protected ListView createAppListView(AppListAdapter adapter) {
ListView list = new ListView(parent);
list.setFastScrollEnabled(true);
list.setOnItemClickListener(parent);
list.setAdapter(adapter);
return list;
}
}

View File

@ -1,14 +1,43 @@
package org.fdroid.fdroid.views.fragments; package org.fdroid.fdroid.views.fragments;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import org.fdroid.fdroid.FDroid; import android.view.View;
import org.fdroid.fdroid.views.AppListViewFactory; import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import org.fdroid.fdroid.AppListAdapter;
import org.fdroid.fdroid.views.AppListView;
public class AppListFragment extends Fragment { abstract class AppListFragment extends Fragment implements AdapterView.OnItemClickListener {
protected AppListViewFactory getViewFactory() { private AppListAdapter appListAdapter;
FDroid parent = (FDroid)getActivity();
return new AppListViewFactory(parent); public AppListAdapter getAppListAdapter() {
return appListAdapter;
} }
public AppListFragment setAppListAdapter(AppListAdapter adapter) {
appListAdapter = adapter;
return this;
}
protected AppListView createPlainAppList(AppListAdapter adapter) {
AppListView view = new AppListView(getActivity());
ListView list = createAppListView(adapter);
view.addView(
list,
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
view.setAppList(list);
return view;
}
protected ListView createAppListView(AppListAdapter adapter) {
ListView list = new ListView(getActivity());
list.setFastScrollEnabled(true);
list.setOnItemClickListener(this);
list.setAdapter(adapter);
return list;
}
} }

View File

@ -4,11 +4,70 @@ import android.os.Bundle;
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 android.widget.*;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.views.AppListView;
public class AvailableAppsFragment extends AppListFragment { public class AvailableAppsFragment extends AppListFragment implements AdapterView.OnItemSelectedListener {
private ArrayAdapter<String> categoriesAdapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return getViewFactory().createAvailableView(); AppListView view = new AppListView(getActivity());
view.setOrientation(LinearLayout.VERTICAL);
Spinner spinner = new Spinner(getActivity());
// Giving it an ID lets the default save/restore state
// functionality do its stuff.
spinner.setId(R.id.categorySpinner);
spinner.setAdapter(getCategoriesAdapter());
spinner.setOnItemSelectedListener(this);
view.addView(
spinner,
new ViewGroup.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
ListView list = createAppListView(getAppListAdapter());
view.setAppList(list);
view.addView(
list,
new ViewGroup.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
return view;
} }
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
public ArrayAdapter<String> getCategoriesAdapter() {
return categoriesAdapter;
}
public void setCategoriesAdapter(ArrayAdapter<String> categoriesAdapter) {
this.categoriesAdapter = categoriesAdapter;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
} }

View File

@ -4,11 +4,16 @@ import android.os.Bundle;
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 android.widget.AdapterView;
public class CanUpdateAppsFragment extends AppListFragment { public class CanUpdateAppsFragment extends AppListFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return getViewFactory().createCanUpdateView(); return createPlainAppList(getAppListAdapter());
} }
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
} }

View File

@ -4,11 +4,16 @@ import android.os.Bundle;
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 android.widget.AdapterView;
public class InstalledAppsFragment extends AppListFragment { public class InstalledAppsFragment extends AppListFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return getViewFactory().createInstalledView(); return createPlainAppList(getAppListAdapter());
} }
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
} }