package com.koushikdutta.widgets;
-import com.koushikdutta.widgets.BetterListFragment.ActivityBaseFragmentListener;
-
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
+import com.koushikdutta.widgets.BetterListFragmentInternal.ActivityBaseFragmentListener;
+
public class BetterListActivity extends FragmentActivity implements ActivityBaseFragmentListener {
this.clazz = BetterListFragment.class;
}
- public BetterListFragment getFragment() {
- return fragment;
+ public BetterListFragmentInternal getFragment() {
+ return fragment.getInternal();
}
public View getView() {
try {
fragment = (BetterListFragment)clazz.getConstructors()[0].newInstance();
fragment.setArguments(getIntent().getExtras());
- fragment.setListener(this);
+ fragment.getInternal().setListener(this);
getSupportFragmentManager().beginTransaction().add(getListContainerId(), fragment).commit();
}
catch (Exception e) {
package com.koushikdutta.widgets;
-import java.util.Comparator;
-
-import android.content.Context;
-import android.content.res.Configuration;
import android.os.Bundle;
-import android.os.Handler;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.AdapterView.OnItemLongClickListener;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-public class BetterListFragment extends Fragment {
- boolean mDestroyed = false;
-
- ListView mListView;
- MyAdapter mAdapter;
-
+public class BetterListFragment extends SupportFragment<BetterListFragmentInternal> {
@Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- float hor = getResources().getDimension(R.dimen.list_horizontal_margin);
- float ver = getResources().getDimension(R.dimen.list_vertical_margin);
- mListView.setPadding((int)hor, (int)ver, (int)hor, (int)ver);
- }
-
- public class MyAdapter extends SeparatedListAdapter<ListItemAdapter> {
- public MyAdapter(Context context) {
- super(context);
- }
-
- @Override
- protected int getListHeaderResource() {
- return BetterListFragment.this.getListHeaderResource();
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- return false;
- }
-
- @Override
- public boolean isEnabled(int position) {
- if (!super.isEnabled(position))
- return false;
- ListItem item = (ListItem) getItem(position);
- if (item == null)
- return false;
- return item.getEnabled();
- }
- }
-
- public class ListItemAdapter extends ArrayAdapter<ListItem> {
- public ListItemAdapter(Context context) {
- super(context, 0);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ListItem item = getItem(position);
- return item.getView(getContext(), convertView);
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- return false;
- }
-
- @Override
- public boolean isEnabled(int position) {
- ListItem item = getItem(position);
- return item.getEnabled();
- }
-
- boolean sorting;
- @Override
- public void notifyDataSetChanged() {
- if (sorter != null && !sorting) {
- sorting = true;
- super.sort(sorter);
- sorting = false;
- }
- else {
- super.notifyDataSetChanged();
- }
- }
-
- private Comparator<ListItem> sorter;
- public void setSort(Comparator<ListItem> sorter) {
- this.sorter = sorter;
- notifyDataSetChanged();
- mAdapter.notifyDataSetChanged();
- }
-
- public Comparator<ListItem> getSort() {
- return sorter;
- }
-
- public Comparator<ListItem> ALPHA = new Comparator<ListItem>() {
- @Override
- public int compare(ListItem lhs, ListItem rhs) {
- return lhs.getTitle().compareTo(rhs.getTitle());
- }
- };
-
- public Comparator<ListItem> ALPHAIGNORECASE = new Comparator<ListItem>() {
+ public BetterListFragmentInternal createFragmentInterface() {
+ return new BetterListFragmentInternal(this) {
@Override
- public int compare(ListItem lhs, ListItem rhs) {
- return lhs.getTitle().compareToIgnoreCase(rhs.getTitle());
+ protected int getListFragmentResource() {
+ int ret = BetterListFragment.this.getListFragmentResource();
+ if (ret == -1)
+ return super.getListFragmentResource();
+ return ret;
}
- };
-
- public Comparator<ListItem> NONE = new Comparator<ListItem>() {
+
@Override
- public int compare(ListItem lhs, ListItem rhs) {
- return ((Integer)getPosition(lhs)).compareTo(getPosition(rhs));
+ protected void onCreate(Bundle savedInstanceState, View view) {
+ super.onCreate(savedInstanceState, view);
+ BetterListFragment.this.onCreate(savedInstanceState, view);
}
};
}
-// HashMap<String, MyListAdapter> mAdapters = new HashMap<String, ActivityBaseFragment.MyListAdapter>();
-
- public ListItemAdapter ensureHeader(int sectionName) {
- return ensureHeader(mAdapter.getSectionCount(), getString(sectionName));
- }
-
- public ListItemAdapter ensureHeader(String sectionName) {
- return ensureHeader(mAdapter.getSectionCount(), sectionName);
- }
-
- public ListItemAdapter ensureHeader(int index, int sectionName) {
- return ensureHeader(index, getString(sectionName));
- }
- public ListItemAdapter ensureHeader(int index, String sectionName) {
- ListItemAdapter adapter = mAdapter.getSection(sectionName);
- if (adapter == null) {
- adapter = new ListItemAdapter(getActivity());
- mAdapter.addSection(index, sectionName, adapter);
- mListView.setAdapter(null);
- mListView.setAdapter(mAdapter);
- }
- return adapter;
- }
-
- public ListItemAdapter getSection(int section) {
- return getSection(getString(section));
- }
-
- public ListItemAdapter getSection(String section) {
- return mAdapter.getSection(section);
- }
-
- public ListItem addItem(int sectionName, ListItem item) {
- return addItem(getString(sectionName), item);
- }
-
- public ListItem addItem(int sectionName, ListItem item, int index) {
- return addItem(getString(sectionName), item, index);
- }
-
- public ListItem addItem(String sectionName, ListItem item) {
- return addItem(sectionName, item, -1);
- }
-
- public int getSectionItemCount(int section) {
- return getSectionItemCount(getString(section));
- }
-
- public int getSectionItemCount(String section) {
- ListItemAdapter adapter = mAdapter.getSection(section);
- if (adapter == null)
- return 0;
- return adapter.getCount();
- }
-
- public ListItem addItem(String sectionName, ListItem item, int index) {
- ListItemAdapter adapter = mAdapter.getSection(sectionName);
- if (adapter == null) {
- adapter = new ListItemAdapter(getActivity());
- mAdapter.addSection(sectionName, adapter);
- if (mListView != null) {
- mListView.setAdapter(null);
- mListView.setAdapter(mAdapter);
- }
-// mAdapter.notifyDataSetChanged();
- }
-
- if (index != -1)
- adapter.insert(item, index);
- else
- adapter.add(item);
-
- mAdapter.notifyDataSetChanged();
- return item;
- }
-
- public ListItem findItem(int item) {
- String text = getString(item);
-
- for (ListItemAdapter adapter: mAdapter.getSections())
- {
- for (int i = 0; i < adapter.getCount(); i++) {
- ListItem li = adapter.getItem(i);
- if (text.equals(li.getTitle()))
- return li;
- }
- }
-
- return null;
- }
-
- private ActivityBaseFragmentListener mListener;
- public ActivityBaseFragmentListener getListener() {
- return mListener;
- }
-
- public void setListener(ActivityBaseFragmentListener listener) {
- mListener = listener;
- }
-
- public static interface ActivityBaseFragmentListener {
- void onCreate(Bundle savedInstanceState, View view);
- }
-
- protected void onCreate(Bundle savedInstanceState, View view) {
- if (mListener != null)
- mListener.onCreate(savedInstanceState, view);
- }
-
protected int getListFragmentResource() {
- return R.layout.list_fragment;
- }
-
- void onListItemClick(ListItem li) {
-
- }
-
- ViewGroup mTitleContainer;
- TextView mEmpty;
- @Override
- public final View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View ret = inflater.inflate(getListFragmentResource(), container, false);
-
- mTitleContainer = (ViewGroup)ret.findViewById(R.id.title_container);
-
- mListView = (ListView)ret.findViewById(R.id.listview);
- mListView.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
- Object item = mAdapter.getItem(arg2);
- if (item instanceof ListItem) {
- ListItem li = (ListItem)item;
- onListItemClick(li);
- li.onClickInternal(arg1);
- }
- }
- });
-
- mListView.setOnItemLongClickListener(new OnItemLongClickListener() {
-
- @Override
- public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
- Object item = mAdapter.getItem(arg2);
- if (item instanceof ListItem) {
- ListItem li = (ListItem)item;
- return li.onLongClick();
- }
- return false;
- }
- });
-
- mListView.setAdapter(mAdapter);
- mEmpty = (TextView)ret.findViewById(R.id.empty);
-
- onCreate(savedInstanceState, ret);
- return ret;
- }
-
- @Override
- public final void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mAdapter = new MyAdapter(getActivity());
- }
-
- Handler handler = new Handler();
-
- @Override
- public void onDestroy() {
- super.onDestroy();
-
- mDestroyed = true;
+ return -1;
}
- protected int getListHeaderResource() {
- return R.layout.list_header;
- }
-
- protected int getListItemResource() {
- return R.layout.list_item;
- }
-
- public void clear() {
- mAdapter.clear();
- }
-
- public void clearSection(int section) {
- clearSection(mListView.getContext().getString(section));
- }
-
- public void clearSection(String section) {
- ListItemAdapter adapter = mAdapter.getSection(section);
- if (adapter == null)
- return;
- adapter.clear();
- mAdapter.notifyDataSetChanged();
- }
-
- public void removeSection(int section) {
- removeSection(mListView.getContext().getString(section));
- }
-
- public void removeSection(String section) {
- mAdapter.removeSection(section);
- }
-
- public void removeItem(ListItem item) {
- for (ListItemAdapter adapter: mAdapter.getSections()) {
- adapter.remove(item);
- }
- mAdapter.notifyDataSetChanged();
- }
-
- public void setEmpty(int res) {
- mListView.setEmptyView(mEmpty);
- mEmpty.setText(res);
- }
-
- public ListView getListView() {
- return mListView;
- }
-
- public MyAdapter getAdapter() {
- return mAdapter;
- }
-
- public ViewGroup getTitleContainer() {
- return mTitleContainer;
+ protected void onCreate(Bundle savedInstanceState, View view) {
}
}
--- /dev/null
+package com.koushikdutta.widgets;
+
+import java.util.Comparator;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+public class BetterListFragmentInternal extends FragmentInterface {
+ ListView mListView;
+ MyAdapter mAdapter;
+
+ public BetterListFragmentInternal(FragmentInterfaceWrapper fragment) {
+ super(fragment);
+ }
+
+ public class MyAdapter extends SeparatedListAdapter<ListItemAdapter> {
+ public MyAdapter(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected int getListHeaderResource() {
+ return BetterListFragmentInternal.this.getListHeaderResource();
+ }
+
+ @Override
+ public boolean areAllItemsEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabled(int position) {
+ if (!super.isEnabled(position))
+ return false;
+ ListItem item = (ListItem) getItem(position);
+ if (item == null)
+ return false;
+ return item.getEnabled();
+ }
+ }
+
+ public class ListItemAdapter extends ArrayAdapter<ListItem> {
+ public ListItemAdapter(Context context) {
+ super(context, 0);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ListItem item = getItem(position);
+ return item.getView(getContext(), convertView);
+ }
+
+ @Override
+ public boolean areAllItemsEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabled(int position) {
+ ListItem item = getItem(position);
+ return item.getEnabled();
+ }
+
+ boolean sorting;
+ @Override
+ public void notifyDataSetChanged() {
+ if (sorter != null && !sorting) {
+ sorting = true;
+ super.sort(sorter);
+ sorting = false;
+ }
+ else {
+ super.notifyDataSetChanged();
+ }
+ }
+
+ private Comparator<ListItem> sorter;
+ public void setSort(Comparator<ListItem> sorter) {
+ this.sorter = sorter;
+ notifyDataSetChanged();
+ mAdapter.notifyDataSetChanged();
+ }
+
+ public Comparator<ListItem> getSort() {
+ return sorter;
+ }
+
+ public Comparator<ListItem> ALPHA = new Comparator<ListItem>() {
+ @Override
+ public int compare(ListItem lhs, ListItem rhs) {
+ return lhs.getTitle().compareTo(rhs.getTitle());
+ }
+ };
+
+ public Comparator<ListItem> ALPHAIGNORECASE = new Comparator<ListItem>() {
+ @Override
+ public int compare(ListItem lhs, ListItem rhs) {
+ return lhs.getTitle().compareToIgnoreCase(rhs.getTitle());
+ }
+ };
+
+ public Comparator<ListItem> NONE = new Comparator<ListItem>() {
+ @Override
+ public int compare(ListItem lhs, ListItem rhs) {
+ return ((Integer)getPosition(lhs)).compareTo(getPosition(rhs));
+ }
+ };
+ }
+
+// HashMap<String, MyListAdapter> mAdapters = new HashMap<String, ActivityBaseFragment.MyListAdapter>();
+
+ public ListItemAdapter ensureHeader(int sectionName) {
+ return ensureHeader(mAdapter.getSectionCount(), getActivity().getString(sectionName));
+ }
+
+ public ListItemAdapter ensureHeader(String sectionName) {
+ return ensureHeader(mAdapter.getSectionCount(), sectionName);
+ }
+
+ public ListItemAdapter ensureHeader(int index, int sectionName) {
+ return ensureHeader(index, getActivity().getString(sectionName));
+ }
+ public ListItemAdapter ensureHeader(int index, String sectionName) {
+ ListItemAdapter adapter = mAdapter.getSection(sectionName);
+ if (adapter == null) {
+ adapter = new ListItemAdapter(getContext());
+ mAdapter.addSection(index, sectionName, adapter);
+ mListView.setAdapter(null);
+ mListView.setAdapter(mAdapter);
+ }
+ return adapter;
+ }
+
+ public ListItemAdapter getSection(int section) {
+ return getSection(getActivity().getString(section));
+ }
+
+ public ListItemAdapter getSection(String section) {
+ return mAdapter.getSection(section);
+ }
+
+ public ListItem addItem(int sectionName, ListItem item) {
+ return addItem(getActivity().getString(sectionName), item);
+ }
+
+ public ListItem addItem(int sectionName, ListItem item, int index) {
+ return addItem(getActivity().getString(sectionName), item, index);
+ }
+
+ public ListItem addItem(String sectionName, ListItem item) {
+ return addItem(sectionName, item, -1);
+ }
+
+ public int getSectionItemCount(int section) {
+ return getSectionItemCount(getActivity().getString(section));
+ }
+
+ public int getSectionItemCount(String section) {
+ ListItemAdapter adapter = mAdapter.getSection(section);
+ if (adapter == null)
+ return 0;
+ return adapter.getCount();
+ }
+
+ public ListItem addItem(String sectionName, ListItem item, int index) {
+ ListItemAdapter adapter = mAdapter.getSection(sectionName);
+ if (adapter == null) {
+ adapter = new ListItemAdapter(getContext());
+ mAdapter.addSection(sectionName, adapter);
+ if (mListView != null) {
+ mListView.setAdapter(null);
+ mListView.setAdapter(mAdapter);
+ }
+// mAdapter.notifyDataSetChanged();
+ }
+
+ if (index != -1)
+ adapter.insert(item, index);
+ else
+ adapter.add(item);
+
+ mAdapter.notifyDataSetChanged();
+ return item;
+ }
+
+ public ListItem findItem(int item) {
+ String text = getActivity().getString(item);
+
+ for (ListItemAdapter adapter: mAdapter.getSections())
+ {
+ for (int i = 0; i < adapter.getCount(); i++) {
+ ListItem li = adapter.getItem(i);
+ if (text.equals(li.getTitle()))
+ return li;
+ }
+ }
+
+ return null;
+ }
+
+ private ActivityBaseFragmentListener mListener;
+ public ActivityBaseFragmentListener getListener() {
+ return mListener;
+ }
+
+ public void setListener(ActivityBaseFragmentListener listener) {
+ mListener = listener;
+ }
+
+ public static interface ActivityBaseFragmentListener {
+ void onCreate(Bundle savedInstanceState, View view);
+ }
+
+ protected void onCreate(Bundle savedInstanceState, View view) {
+ if (mListener != null)
+ mListener.onCreate(savedInstanceState, view);
+ }
+
+ protected int getListFragmentResource() {
+ return R.layout.list_fragment;
+ }
+
+ void onListItemClick(ListItem li) {
+
+ }
+
+ ViewGroup mTitleContainer;
+ TextView mEmpty;
+
+
+ protected int getListHeaderResource() {
+ return R.layout.list_header;
+ }
+
+ protected int getListItemResource() {
+ return R.layout.list_item;
+ }
+
+ public void clear() {
+ mAdapter.clear();
+ }
+
+ public void clearSection(int section) {
+ clearSection(mListView.getContext().getString(section));
+ }
+
+ public void clearSection(String section) {
+ ListItemAdapter adapter = mAdapter.getSection(section);
+ if (adapter == null)
+ return;
+ adapter.clear();
+ mAdapter.notifyDataSetChanged();
+ }
+
+ public void removeSection(int section) {
+ removeSection(mListView.getContext().getString(section));
+ }
+
+ public void removeSection(String section) {
+ mAdapter.removeSection(section);
+ }
+
+ public void removeItem(ListItem item) {
+ for (ListItemAdapter adapter: mAdapter.getSections()) {
+ adapter.remove(item);
+ }
+ mAdapter.notifyDataSetChanged();
+ }
+
+ public void setEmpty(int res) {
+ mListView.setEmptyView(mEmpty);
+ mEmpty.setText(res);
+ }
+
+ public ListView getListView() {
+ return mListView;
+ }
+
+ public MyAdapter getAdapter() {
+ return mAdapter;
+ }
+
+ public ViewGroup getTitleContainer() {
+ return mTitleContainer;
+ }
+
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ float hor = getActivity().getResources().getDimension(R.dimen.list_horizontal_margin);
+ float ver = getActivity().getResources().getDimension(R.dimen.list_vertical_margin);
+ mListView.setPadding((int)hor, (int)ver, (int)hor, (int)ver);
+ }
+
+ @Override
+ public final View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View ret = inflater.inflate(getListFragmentResource(), container, false);
+
+ mTitleContainer = (ViewGroup)ret.findViewById(R.id.title_container);
+
+ mListView = (ListView)ret.findViewById(R.id.listview);
+ mListView.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
+ Object item = mAdapter.getItem(arg2);
+ if (item instanceof ListItem) {
+ ListItem li = (ListItem)item;
+ onListItemClick(li);
+ li.onClickInternal(arg1);
+ }
+ }
+ });
+
+ mListView.setOnItemLongClickListener(new OnItemLongClickListener() {
+
+ @Override
+ public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
+ Object item = mAdapter.getItem(arg2);
+ if (item instanceof ListItem) {
+ ListItem li = (ListItem)item;
+ return li.onLongClick();
+ }
+ return false;
+ }
+ });
+
+ mListView.setAdapter(mAdapter);
+ mEmpty = (TextView)ret.findViewById(R.id.empty);
+
+ onCreate(savedInstanceState, ret);
+ return ret;
+ }
+
+ @Override
+ public final void onCreate(Bundle savedInstanceState) {
+ mAdapter = new MyAdapter(getContext());
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ }
+}
--- /dev/null
+package com.koushikdutta.widgets;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+public abstract class FragmentInterface {
+ protected FragmentInterfaceWrapper mFragment;
+
+ public Activity getActivity() {
+ return getFragment().getActivity();
+ }
+
+ public Context getContext() {
+ return getFragment().getActivity();
+ }
+
+ public FragmentInterfaceWrapper getFragment() {
+ return mFragment;
+ }
+
+ public FragmentInterface(FragmentInterfaceWrapper fragment) {
+ mFragment = fragment;
+ }
+
+ public String getString(int res) {
+ return getActivity().getString(res);
+ }
+ public String getString(int res, Object... formatArgs) {
+ return getActivity().getString(res, formatArgs);
+ }
+
+ public Resources getResources() {
+ return getActivity().getResources();
+ }
+
+ abstract public void onConfigurationChanged(Configuration newConfig);
+
+ abstract public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
+
+ abstract public void onCreate(Bundle savedInstanceState);
+
+ abstract public void onCreateOptionsMenu(Menu menu, MenuInflater inflater);
+
+}
--- /dev/null
+package com.koushikdutta.widgets;
+
+import android.app.Activity;
+
+public interface FragmentInterfaceWrapper {
+ public Activity getActivity();
+ public FragmentInterface getInternal();
+ public void setHasOptionsMenu(boolean options);
+}
package com.koushikdutta.widgets;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ListView;
-import android.widget.ViewSwitcher;
-public class ListContentFragment extends BetterListFragment {
- ViewGroup mContent;
- ViewGroup mContainer;
-
- @Override
- protected int getListHeaderResource() {
- return R.layout.list_content_header;
- }
-
- private void setPadding() {
- float hor = getResources().getDimension(R.dimen.list_horizontal_margin);
- float ver = getResources().getDimension(R.dimen.list_vertical_margin);
- getListView().setPadding(0, 0, 0, 0);
- ver = 0;
- mContainer.setPadding((int)hor, (int)ver, (int)hor, (int)ver);
- }
-
- Fragment mCurrentContent;
-
- @Override
- protected void onCreate(Bundle savedInstanceState, View ret) {
- mContent = (ViewGroup)ret.findViewById(R.id.content);
- mContainer = (ViewGroup)ret.findViewById(R.id.list_content_container);
-
- setPadding();
- getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
-
- super.onCreate(savedInstanceState, ret);
- }
-
- public boolean isPaged() {
- return mContainer instanceof ViewSwitcher;
- }
-
- public void setContent(Fragment content, boolean clearChoices) {
- Fragment last = mCurrentContent;
- mCurrentContent = content;
- FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
- if (last != null)
- ft.replace(R.id.content, mCurrentContent);
- else
- ft.add(R.id.content, mCurrentContent);
- ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
- if (mContainer instanceof ViewSwitcher) {
- ViewSwitcher switcher = (ViewSwitcher)mContainer;
- if (mContent != switcher.getCurrentView())
- switcher.showNext();
- }
- ft.commit();
- if (clearChoices)
- getListView().clearChoices();
- }
-
- public boolean onBackPressed() {
- if (mCurrentContent == null)
- return false;
- if (mContainer instanceof ViewSwitcher) {
- ((ViewSwitcher)mContainer).showPrevious();
- FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
- ft.remove(mCurrentContent);
- ft.commit();
- mCurrentContent = null;
- return true;
- }
- return false;
- }
+public class ListContentFragment extends BetterListFragment {
@Override
- protected int getListItemResource() {
- return R.layout.list_item_selectable;
+ public ListContentFragmentInternal createFragmentInterface() {
+ return new ListContentFragmentInternal(this);
}
- @Override
- protected int getListFragmentResource() {
- return R.layout.list_content;
- }
-
- public ViewGroup getContent() {
- return mContent;
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- setPadding();
- }
}
--- /dev/null
+package com.koushikdutta.widgets;
+
+import android.app.Activity;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentTransaction;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+import android.widget.ViewSwitcher;
+
+public class ListContentFragmentInternal extends BetterListFragmentInternal {
+ ViewGroup mContent;
+ ViewGroup mContainer;
+
+ public ListContentFragmentInternal(FragmentInterfaceWrapper fragment) {
+ super(fragment);
+ }
+
+ @Override
+ protected int getListHeaderResource() {
+ return R.layout.list_content_header;
+ }
+
+ private void setPadding() {
+ float hor = getResources().getDimension(R.dimen.list_horizontal_margin);
+ float ver = getResources().getDimension(R.dimen.list_vertical_margin);
+ getListView().setPadding(0, 0, 0, 0);
+ ver = 0;
+ mContainer.setPadding((int)hor, (int)ver, (int)hor, (int)ver);
+ }
+
+ FragmentInterfaceWrapper mCurrentContent;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState, View ret) {
+ mContent = (ViewGroup)ret.findViewById(R.id.content);
+ mContainer = (ViewGroup)ret.findViewById(R.id.list_content_container);
+
+ setPadding();
+ getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+
+ super.onCreate(savedInstanceState, ret);
+ }
+
+ public boolean isPaged() {
+ return mContainer instanceof ViewSwitcher;
+ }
+
+ void setContentNative(FragmentInterfaceWrapper last) {
+ android.app.Fragment f = (android.app.Fragment)mCurrentContent;
+ Activity fa = getActivity();
+ android.app.FragmentTransaction ft = fa.getFragmentManager().beginTransaction();
+ if (last != null)
+ ft.replace(R.id.content, f);
+ else
+ ft.add(R.id.content, f);
+ ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
+ if (mContainer instanceof ViewSwitcher) {
+ ViewSwitcher switcher = (ViewSwitcher)mContainer;
+ if (mContent != switcher.getCurrentView())
+ switcher.showNext();
+ }
+ ft.commit();
+ }
+
+ public void setContent(FragmentInterfaceWrapper content, boolean clearChoices) {
+ FragmentInterfaceWrapper last = mCurrentContent;
+ mCurrentContent = content;
+ if (getActivity() instanceof FragmentActivity) {
+ Fragment f = (Fragment)mCurrentContent;
+ FragmentActivity fa = (FragmentActivity)getActivity();
+ FragmentTransaction ft = fa.getSupportFragmentManager().beginTransaction();
+ if (last != null)
+ ft.replace(R.id.content, f);
+ else
+ ft.add(R.id.content, f);
+ ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
+ if (mContainer instanceof ViewSwitcher) {
+ ViewSwitcher switcher = (ViewSwitcher)mContainer;
+ if (mContent != switcher.getCurrentView())
+ switcher.showNext();
+ }
+ ft.commit();
+ }
+ else {
+ setContentNative(last);
+ }
+
+ if (clearChoices)
+ getListView().clearChoices();
+ }
+
+ public void goBackNative() {
+ android.app.Fragment f = (android.app.Fragment)mCurrentContent;
+ Activity fa = getActivity();
+ ((ViewSwitcher)mContainer).showPrevious();
+ fa.getFragmentManager().beginTransaction()
+ .remove(f)
+ .commit();
+ mCurrentContent = null;
+ }
+
+ public boolean onBackPressed() {
+ if (mCurrentContent == null)
+ return false;
+ if (mContainer instanceof ViewSwitcher) {
+ if (getActivity() instanceof FragmentActivity) {
+ Fragment f = (Fragment)mCurrentContent;
+ FragmentActivity fa = (FragmentActivity)getActivity();
+ ((ViewSwitcher)mContainer).showPrevious();
+ fa.getSupportFragmentManager().beginTransaction()
+ .remove(f)
+ .commit();
+ mCurrentContent = null;
+ return true;
+ }
+ else {
+ goBackNative();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ protected int getListItemResource() {
+ return R.layout.list_item_selectable;
+ }
+
+ @Override
+ protected int getListFragmentResource() {
+ return R.layout.list_content;
+ }
+
+ public ViewGroup getContent() {
+ return mContent;
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ setPadding();
+ }
+}
public class ListItem {
private String Title;
private String Summary;
- private BetterListFragment mFragment;
+ private BetterListFragmentInternal mFragment;
private boolean Enabled = true;
private int Icon;
return this;
}
+ int mAttr = 0;
public ListItem setAttrDrawable(int attr) {
- Context ctx = mFragment.getActivity();
- TypedValue value = new TypedValue();
- ctx.getTheme().resolveAttribute(attr, value, true);
- setIcon(value.resourceId);
+ mAttr = attr;
+ mDrawable = null;
+ Icon = 0;
return this;
}
return this;
}
- public ListItem(BetterListFragment context, int title, int summary) {
+ public ListItem(BetterListFragmentInternal context, int title, int summary) {
if (title != 0)
Title = context.getString(title);
if (summary != 0)
mFragment = context;
}
- public ListItem(BetterListFragment context, String title, String summary) {
+ public ListItem(BetterListFragmentInternal context, String title, String summary) {
Title = title;
Summary = summary;
mFragment = context;
}
- public ListItem(BetterListFragment context, int title, int summary, int icon) {
+ public ListItem(BetterListFragmentInternal context, int title, int summary, int icon) {
this(context, title, summary);
Icon = icon;
}
- public ListItem(BetterListFragment context, String title, String summary, int icon) {
+ public ListItem(BetterListFragmentInternal context, String title, String summary, int icon) {
this(context, title, summary);
Icon = icon;
}
Drawable mDrawable;
- public ListItem(BetterListFragment context, String title, String summary, Drawable drawable) {
+ public ListItem(BetterListFragmentInternal context, String title, String summary, Drawable drawable) {
this(context, title, summary);
mDrawable = drawable;
}
}
public View getView(Context context, View convertView) {
+ LayoutInflater inflater;
+ int theme = getTheme();
+ if (theme != 0) {
+ inflater = (LayoutInflater) new ContextThemeWrapper(context, theme).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ }
+ else {
+ inflater = LayoutInflater.from(context);
+ }
if (convertView == null || convertView.getTag() != null) {
- LayoutInflater inflater;
- int theme = getTheme();
- if (theme != 0) {
- inflater = (LayoutInflater)new ContextThemeWrapper(context, theme).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- }
- else {
- inflater = LayoutInflater.from(context);
- }
convertView = inflater.inflate(mFragment.getListItemResource(), null);
}
-
TextView title = (TextView)convertView.findViewById(R.id.title);
TextView summary = (TextView)convertView.findViewById(R.id.summary);
CompoundButton cb = (CompoundButton)convertView.findViewById(R.id.checkbox);
ImageView iv = (ImageView)convertView.findViewById(R.id.image);
if (iv != null) {
+ if (mAttr != 0) {
+ Context ctx = inflater.getContext();
+ TypedValue value = new TypedValue();
+ ctx.getTheme().resolveAttribute(mAttr, value, true);
+ mAttr = 0;
+ Icon = value.resourceId;
+ }
+
if (Icon != 0) {
iv.setVisibility(View.VISIBLE);
iv.setImageResource(Icon);
--- /dev/null
+package com.koushikdutta.widgets;
+
+import android.app.Fragment;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+
+public abstract class NativeFragment<T extends FragmentInterface> extends Fragment implements FragmentInterfaceWrapper {
+ public abstract T createFragmentInterface();
+
+ T internal;
+ public NativeFragment() {
+ internal = createFragmentInterface();
+ }
+
+ @Override
+ public T getInternal() {
+ return internal;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ internal.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ internal.onConfigurationChanged(newConfig);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ return internal.onCreateView(inflater, container, savedInstanceState);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+
+ internal.onCreateOptionsMenu(menu, inflater);
+ }
+}
--- /dev/null
+package com.koushikdutta.widgets;
+
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+
+public abstract class SupportFragment<T extends FragmentInterface> extends Fragment implements FragmentInterfaceWrapper {
+ public abstract T createFragmentInterface();
+
+ T internal;
+ public SupportFragment() {
+ internal = createFragmentInterface();
+ }
+
+ @Override
+ public T getInternal() {
+ return internal;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ internal.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ internal.onConfigurationChanged(newConfig);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ return internal.onCreateView(inflater, container, savedInstanceState);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+
+ internal.onCreateOptionsMenu(menu, inflater);
+ }
+}
import com.koushikdutta.widgets.BetterListActivity;
import com.koushikdutta.widgets.ListContentFragment;
+import com.koushikdutta.widgets.ListContentFragmentInternal;
import com.koushikdutta.widgets.ListItem;
public class ListContentTest extends BetterListActivity {
super(ListContentFragment.class);
}
- public ListContentFragment getFragment() {
- return (ListContentFragment)super.getFragment();
+ public ListContentFragmentInternal getFragment() {
+ return (ListContentFragmentInternal)super.getFragment();
}
protected void onResume() {