Last active
August 29, 2015 14:01
-
-
Save coffeearmy/741330edeff869bc4857 to your computer and use it in GitHub Desktop.
Android List. with LoaderCallback, Adapter and OTTO events bus, ImageLoader
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import java.util.List; | |
import android.os.Bundle; | |
import android.support.v4.app.Fragment; | |
import android.support.v4.app.FragmentTransaction; | |
import android.support.v4.app.LoaderManager.LoaderCallbacks; | |
import android.support.v4.content.Loader; | |
import android.view.LayoutInflater; | |
import android.view.Menu; | |
import android.view.MenuInflater; | |
import android.view.MenuItem; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.ListView; | |
import com.squareup.otto.Subscribe; | |
public class ItemListFragment extends Fragment implements LoaderCallbacks<List<Item>>{ | |
private static final int LOADER_ITEM_ID = 0; | |
private ListView mLstItem; | |
private ArrayList<Item> mItemList; | |
private ListItemAdapter mAdapterList; | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
setHasOptionsMenu(true); | |
OttoBusHelper.getCurrentBus().register(this); | |
super.onCreate(savedInstanceState); | |
} | |
@Override | |
public View onCreateView(LayoutInflater inflater, ViewGroup container, | |
Bundle savedInstanceState) { | |
View lstLayout = inflater.inflate(R.layout.list_layout, | |
null); | |
mLstElect = (ListView) lstLayout | |
.findViewById(R.id.lstView); | |
mItemList = new ArrayList<Item>(); | |
mAdapterList = new ListAdapter(getActivity(), | |
R.layout.list_item, mItemList); | |
mLstElect.setAdapter(mAdapterList); | |
getLoaderManager().initLoader(LOADER_ELECT_ID, null, this).forceLoad(); | |
return lstLayout; | |
} | |
@Override | |
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { | |
// TODO Auto-generated method stub | |
super.onCreateOptionsMenu(menu, inflater); | |
} | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
switch (item.getItemId()) { | |
case R.id.action_addItem: | |
showNewElectrodomesticoDialog(); | |
return true; | |
default: | |
break; | |
} | |
return super.onOptionsItemSelected(item); | |
} | |
private void showNewElectrodomesticoDialog() { | |
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); | |
NuevoItemDialog newFragment= NuevoItemDialog.newInstance(0); | |
newFragment.show(ft, NuevoItemDialog.FRAGMENT_TAG); | |
} | |
@Subscribe | |
public void updateResultsInUi(OnFinishAddItem event) { | |
ITtem electItem=event.getItem(); | |
ItemHandlerImpl.getInstance(getActivity()).insertItem(electItem); | |
listChanged(electItem); | |
} | |
private void listChanged(Item item) { | |
mItemList.add(item); | |
mAdapterList.notifyDataSetChanged(); | |
//getLoaderManager().initLoader(LOADER_ITEM_ID, null, this).forceLoad(); | |
} | |
/* | |
* Loader Callbaks | |
* @see android.support.v4.app.LoaderManager.LoaderCallbacks#onCreateLoader(int, android.os.Bundle) | |
*/ | |
@Override | |
public Loader<List<Item>> onCreateLoader(int arg0, Bundle arg1) { | |
return new ItemLoader(getActivity()); | |
} | |
@Override | |
public void onLoadFinished(Loader<List< Item >> arg0, | |
List<Electrodomesticos> arg1) { | |
mAdapterList.changeDataSet((ArrayList< Item >) arg1); | |
} | |
@Override | |
public void onLoaderReset(Loader<List< Item >> arg0) { | |
mAdapterList.changeDataSet(new ArrayList< Item >()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.List; | |
import android.content.Context; | |
import android.support.v4.content.AsyncTaskLoader; | |
public class ItemLoader extends AsyncTaskLoader<List<Item>> { | |
private Context mContext; | |
private int mId; | |
public OperationLoader(Context context,int id) { | |
super(context); | |
mId =id; | |
} | |
@Override | |
public List<Item> loadInBackground() { | |
return OperationHandler.getInstance(mContext).getItemsFromID(mId); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
android:orientation="vertical" > | |
<ImageView | |
android:id="@+id/img" | |
android:layout_width="45dp" | |
android:layout_height="45dp" | |
android:layout_alignParentLeft="true" | |
android:layout_alignParentTop="true" | |
android:layout_margin="8dp" | |
android:src="@android:drawable/ic_menu_camera" /> | |
<TextView | |
android:id="@+id/txt1" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_alignTop="@+id/img" | |
android:layout_marginLeft="14dp" | |
android:layout_toRightOf="@+id/img" | |
android:text="TextView" | |
android:textAppearance="?android:attr/textAppearanceMedium" /> | |
<TextView | |
android:id="@+id/txt2" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_alignLeft="@+id/txt1" | |
android:layout_below="@+id/txt1" | |
android:text="Small Text" | |
android:textAppearance="?android:attr/textAppearanceSmall" /> | |
<TextView | |
android:id="@+id/txt3" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_alignBaseline="@+id/txt2" | |
android:layout_alignBottom="@+id/txt2" | |
android:layout_marginLeft="8dp" | |
android:layout_toRightOf="@+id/txt2" | |
android:text="Small Text" | |
android:textAppearance="?android:attr/textAppearanceSmall" /> | |
</RelativeLayout> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import android.app.Activity; | |
import android.content.Context; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.ArrayAdapter; | |
import android.widget.ImageView; | |
import android.widget.TextView; | |
import com.nostra13.universalimageloader.core.ImageLoader; | |
public class ListItemAdapter extends ArrayAdapter<Item> { | |
// ViewHolder pattern | |
static class ViewHolder { | |
public TextView nameElect; | |
public TextView potencia; | |
public TextView duracion; | |
public ImageView icon; | |
} | |
private Context mContext; | |
private ArrayList<Item> mItemList; | |
private int mItemLayout; | |
private ImageLoader mImageLoader; | |
public ListElectAdapter(Context context, int resource, | |
ArrayList<Item> mItemList) { | |
super(context, resource, mItemList); | |
this.mContext = context; | |
this.mItemList = mItemList; | |
this.mItemLayout = resource; | |
this.mImageLoader=ImageLoader.getInstance(); | |
mImageLoader=ImageLoader.getInstance(); | |
options = new DisplayImageOptions.Builder() | |
.showStubImage(R.drawable.ic_launcher) | |
.showImageForEmptyUri(R.drawable.ic_launcher) | |
.cacheOnDisc() | |
.cacheInMemory() | |
.build(); | |
} | |
@Override | |
public View getView(int position, View convertView, ViewGroup parent) { | |
View rowView = convertView; | |
// If the convertview is null needs to be inflated, if not null it can | |
// be reuse it | |
if (rowView == null) { | |
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); | |
rowView = inflater.inflate(R.layout.list_item, null); | |
// configure view holder | |
ViewHolder viewHolder = new ViewHolder(); | |
viewHolder.nameElect = (TextView) rowView | |
.findViewById(R.id.txt1); | |
viewHolder.icon = (ImageView) rowView | |
.findViewById(R.id.imgLstElect); | |
viewHolder.potencia = (TextView) rowView | |
.findViewById(R.id.txt2); | |
viewHolder.duracion = (TextView) rowView | |
.findViewById(R.id.txt3); | |
// Store the viewHolder in the tag of the view | |
rowView.setTag(viewHolder); | |
} | |
// fill data | |
ViewHolder holder = (ViewHolder) rowView.getTag(); | |
Item item = mItemList.get(position); | |
holder.nameElect.setText(item.get1()); | |
holder.potencia.setText(item.get2()+""); | |
holder.duracion.setText(item.get3()+""); | |
// Load image, decode it to Bitmap and display Bitmap in ImageView (or | |
// any other view which implements ImageAware interface) | |
//Using universal-imager-loader lib | |
if(item.getFoto()!=null&&! item.getFoto().equals("")){ | |
holder.icon.setVisibility(View.VISIBLE); | |
mImageLoader.displayImage(item.getFoto(), holder.icon,options); | |
}else{ | |
holder.icon.setVisibility(View.GONE); | |
} | |
return rowView; | |
} | |
public void changeDataSet(ArrayList<Item> arrayList) { | |
mItemList.clear(); | |
mItemList.addAll(arrayList); | |
notifyDataSetChanged(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.File; | |
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; | |
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator; | |
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache; | |
import com.nostra13.universalimageloader.core.DisplayImageOptions; | |
import com.nostra13.universalimageloader.core.ImageLoader; | |
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; | |
import com.nostra13.universalimageloader.core.assist.QueueProcessingType; | |
import com.nostra13.universalimageloader.core.download.BaseImageDownloader; | |
import com.nostra13.universalimageloader.utils.StorageUtils; | |
import android.app.Application; | |
import android.graphics.Bitmap.CompressFormat; | |
import android.os.AsyncTask; | |
public class MyApplication extends Application { | |
@Override | |
public void onCreate() { | |
super.onCreate(); | |
// Create global configuration and initialize ImageLoader with this | |
// configuration | |
File cacheDir = StorageUtils.getCacheDirectory(getBaseContext()); | |
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getBaseContext()) | |
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions | |
.taskExecutor(AsyncTask.THREAD_POOL_EXECUTOR) | |
.taskExecutorForCachedImages(AsyncTask.THREAD_POOL_EXECUTOR) | |
.threadPoolSize(3) // default | |
.threadPriority(Thread.NORM_PRIORITY - 1) // default | |
.tasksProcessingOrder(QueueProcessingType.FIFO) // default | |
.denyCacheImageMultipleSizesInMemory() | |
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // default | |
.memoryCacheSize(2 * 1024 * 1024) | |
.discCache(new UnlimitedDiscCache(cacheDir)) // default | |
.discCacheSize(50 * 1024 * 1024) | |
.discCacheFileCount(100) | |
.discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default | |
.imageDownloader(new BaseImageDownloader(getBaseContext())) // default | |
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default | |
.build(); | |
ImageLoader.getInstance().init(config); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Oncreate | |
... | |
if(savedInstanceState!=null){ | |
restoreState(savedInstanceState); | |
} | |
... | |
/** Save the last viewed position of the list */ | |
@Override | |
public void onSaveInstanceState(Bundle outState) { | |
super.onSaveInstanceState(outState); | |
outState.putInt(Constant.OVERVIEW_ITEM_LIST_SAVE, | |
mListOverview.getFirstVisiblePosition()); | |
} | |
private void restoreState(Bundle savedInstanceState) { | |
int selectedItem = savedInstanceState | |
.getInt(Constant.OVERVIEW_ITEM_LIST_SAVE); | |
mListOverview.smoothScrollToPosition(selectedItem); | |
mListOverview.setSelection(selectedItem); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment