diff --git a/AndroidSwipeLayout.zip b/AndroidSwipeLayout.zip new file mode 100644 index 00000000..eb9b912b Binary files /dev/null and b/AndroidSwipeLayout.zip differ diff --git a/build.gradle b/build.gradle index 82697f55..794e09a6 100644 --- a/build.gradle +++ b/build.gradle @@ -6,9 +6,13 @@ buildscript { maven { url "https://jitpack.io" } + maven { + url 'https://maven.google.com/' + name 'Google' + } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:4.2.2' classpath 'com.github.dcendents:android-maven-plugin:1.2' // NOTE: Do not place your application dependencies here; they belong @@ -22,5 +26,9 @@ allprojects { maven { url "https://jitpack.io" } + maven { + url 'https://maven.google.com/' + name 'Google' + } } } diff --git a/demo/build.gradle b/demo/build.gradle index 09dca2ba..7f2ee73d 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -5,7 +5,7 @@ repositories { } android { - compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION) + compileSdkVersion 28 buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION defaultConfig { minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION) @@ -25,11 +25,29 @@ android { } dependencies { - compile project(":library") - compile 'com.android.support:recyclerview-v7:25.1.1' - compile 'com.daimajia.easing:library:1.0.0@aar' - compile 'com.daimajia.androidanimations:library:1.1.2@aar' - compile 'com.nineoldandroids:library:2.4.0' + def glide_version = "4.3.1" + def view_model_version = "1.1.0" + def support_version = "27.1.0" + + implementation project(":library") + implementation "com.android.support:appcompat-v7:$support_version" + implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'com.daimajia.easing:library:1.0.0@aar' + implementation 'com.daimajia.androidanimations:library:1.1.2@aar' + implementation 'com.nineoldandroids:library:2.4.0' // This dude gave a shoutout to you (daimajia) on his github page: - compile 'jp.wasabeef:recyclerview-animators:1.0.3@aar' + implementation 'jp.wasabeef:recyclerview-animators:1.0.3@aar' + + //adding glide + implementation "com.github.bumptech.glide:glide:$glide_version" + annotationProcessor "com.github.bumptech.glide:compiler:$glide_version" + + //adding retrofit + implementation 'com.squareup.retrofit2:retrofit:2.4.0' + implementation 'com.squareup.retrofit2:converter-gson:2.4.0' + + //adding view model + implementation "android.arch.lifecycle:extensions:$view_model_version" + implementation "android.arch.lifecycle:viewmodel:$view_model_version" + implementation 'androidx.paging:paging-runtime:2.1.2' } diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index 0f57bf1a..58dc888f 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" package="com.daimajia.swipedemo"> + + diff --git a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java index 42fae4da..d041ed10 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java @@ -7,10 +7,12 @@ import android.widget.AdapterView; import android.widget.GridView; +import androidx.appcompat.app.AppCompatActivity; + import com.daimajia.swipe.util.Attributes; import com.daimajia.swipedemo.adapter.GridViewAdapter; -public class GridViewExample extends Activity{ +public class GridViewExample extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { diff --git a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java index f957fc8d..931593fd 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java @@ -16,11 +16,13 @@ import android.widget.ListView; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.daimajia.swipe.SwipeLayout; import com.daimajia.swipe.util.Attributes; import com.daimajia.swipedemo.adapter.ListViewAdapter; -public class ListViewExample extends Activity { +public class ListViewExample extends AppCompatActivity { private ListView mListView; private ListViewAdapter mAdapter; diff --git a/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java b/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java index 8a476218..e35c3d1d 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java +++ b/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java @@ -10,10 +10,12 @@ import android.view.View; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.daimajia.swipe.SwipeLayout; import com.nineoldandroids.view.ViewHelper; -public class MyActivity extends Activity { +public class MyActivity extends AppCompatActivity { private SwipeLayout sample1, sample2, sample3; @@ -183,6 +185,8 @@ public boolean onOptionsItemSelected(MenuItem item) { return true; } else if (id == R.id.action_recycler) { startActivity(new Intent(this, RecyclerViewExample.class)); + } else if (id == R.id.action_recycler_paged) { + startActivity(new Intent(this, RecyclerViewPagedExample.class)); } return super.onOptionsItemSelected(item); } diff --git a/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java b/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java index 43910972..510bd30b 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java @@ -5,9 +5,11 @@ import android.view.View; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.daimajia.swipe.SwipeLayout; -public class NestedExample extends Activity{ +public class NestedExample extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { diff --git a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java index fd42733f..17489417 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java @@ -5,12 +5,14 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.daimajia.swipe.util.Attributes; import com.daimajia.swipedemo.adapter.RecyclerViewAdapter; import com.daimajia.swipedemo.adapter.util.DividerItemDecoration; @@ -20,7 +22,7 @@ import jp.wasabeef.recyclerview.animators.FadeInLeftAnimator; -public class RecyclerViewExample extends Activity { +public class RecyclerViewExample extends AppCompatActivity { /** * RecyclerView: The new recycler view replaces the list view. Its more modular and therefore we diff --git a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewPagedExample.java b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewPagedExample.java new file mode 100644 index 00000000..b37f97f8 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewPagedExample.java @@ -0,0 +1,105 @@ +package com.daimajia.swipedemo; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; +import androidx.paging.PagedList; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.daimajia.swipedemo.adapter.PagedItemAdapter; +import com.daimajia.swipedemo.models.Item; +import com.daimajia.swipedemo.retrofit.ItemViewModel; + +import java.util.ArrayList; + +public class RecyclerViewPagedExample extends AppCompatActivity { + + /** + * RecyclerView: The new recycler view replaces the list view. Its more modular and therefore we + * must implement some of the functionality ourselves and attach it to our recyclerview. + *

+ * 1) Position items on the screen: This is done with LayoutManagers + * 2) Animate & Decorate views: This is done with ItemAnimators & ItemDecorators + * 3) Handle any touch events apart from scrolling: This is now done in our adapter's ViewHolder + */ + + private RecyclerView recyclerView; + private RecyclerView.Adapter mAdapter; + + private ArrayList mDataSet; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.recyclerview); + recyclerView = (RecyclerView) findViewById(R.id.recycler_view); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setTitle("RecyclerView"); + } + } + + //setting up recyclerview + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + recyclerView.setHasFixedSize(true); + + //getting our ItemViewModel + ItemViewModel itemViewModel = ViewModelProviders.of(this).get(ItemViewModel.class); + + //creating the Adapter + final PagedItemAdapter adapter = new PagedItemAdapter(this); + + + //observing the itemPagedList from view model + itemViewModel.itemPagedList.observe(this, new Observer>() { + @Override + public void onChanged(@Nullable PagedList items) { + + //in case of any changes + //submitting the items to adapter + adapter.submitList(items); + } + }); + + //setting the adapter + recyclerView.setAdapter(adapter); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.my, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_listview) { + startActivity(new Intent(this, ListViewExample.class)); + finish(); + return true; + } else if (id == R.id.action_gridview) { + startActivity(new Intent(this, GridViewExample.class)); + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/PagedItemAdapter.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/PagedItemAdapter.java new file mode 100644 index 00000000..1c6a3591 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/PagedItemAdapter.java @@ -0,0 +1,81 @@ +package com.daimajia.swipedemo.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.daimajia.swipe.adapters.PagedListSwipeAdapter; +import com.daimajia.swipedemo.R; +import com.daimajia.swipedemo.models.Item; + +public class PagedItemAdapter extends PagedListSwipeAdapter { + + private Context mCtx; + + + public PagedItemAdapter(Context mCtx) { + super(DIFF_CALLBACK); + this.mCtx = mCtx; + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_users, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Item item = getItem(position); + + if (item != null) { + holder.textView.setText(item.owner.display_name); + Glide.with(mCtx) + .load(item.owner.profile_image) + .into(holder.imageView); + } else { + Toast.makeText(mCtx, "Item is null", Toast.LENGTH_LONG).show(); + } + } + + private static DiffUtil.ItemCallback DIFF_CALLBACK = + new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(Item oldItem, Item newItem) { + return oldItem.question_id == newItem.question_id; + } + + @Override + public boolean areContentsTheSame(Item oldItem, Item newItem) { + return oldItem.equals(newItem); + } + }; + + @Override + public int getSwipeLayoutResourceId(int position) { + return R.id.swipe; + } + + + class ItemViewHolder extends RecyclerView.ViewHolder { + + TextView textView; + ImageView imageView; + + public ItemViewHolder(View itemView) { + super(itemView); + textView = itemView.findViewById(R.id.textViewName); + imageView = itemView.findViewById(R.id.imageView); + } + } +} diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java index 3b4c34d4..20d2bb7a 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java +++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java @@ -1,7 +1,6 @@ package com.daimajia.swipedemo.adapter; import android.content.Context; -import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -10,6 +9,8 @@ import android.widget.TextView; import android.widget.Toast; +import androidx.recyclerview.widget.RecyclerView; + import com.daimajia.androidanimations.library.Techniques; import com.daimajia.androidanimations.library.YoYo; import com.daimajia.swipe.SimpleSwipeListener; @@ -61,7 +62,7 @@ public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { } @Override - public void onBindViewHolder(final SimpleViewHolder viewHolder, final int position) { + public void onBindViewHolder(SimpleViewHolder viewHolder, int position) { String item = mDataset.get(position); viewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown); viewHolder.swipeLayout.addSwipeListener(new SimpleSwipeListener() { diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/DividerItemDecoration.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/DividerItemDecoration.java index 85b5b3d2..e2812ec9 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/DividerItemDecoration.java +++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/DividerItemDecoration.java @@ -5,11 +5,12 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.View; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + public class DividerItemDecoration extends RecyclerView.ItemDecoration { private Drawable mDivider; diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java index 613e8e52..de2d5725 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java +++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java @@ -1,11 +1,12 @@ package com.daimajia.swipedemo.adapter.util; import android.content.Context; -import android.support.v7.widget.RecyclerView; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; +import androidx.recyclerview.widget.RecyclerView; + public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { private OnItemClickListener mListener; diff --git a/demo/src/main/java/com/daimajia/swipedemo/models/Item.java b/demo/src/main/java/com/daimajia/swipedemo/models/Item.java new file mode 100644 index 00000000..c144c550 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/models/Item.java @@ -0,0 +1,11 @@ +package com.daimajia.swipedemo.models; + +public class Item { + public Owner owner; + public boolean is_accepted; + public int score; + public long last_activity_date; + public long creation_date; + public long answer_id; + public long question_id; +} diff --git a/demo/src/main/java/com/daimajia/swipedemo/models/Owner.java b/demo/src/main/java/com/daimajia/swipedemo/models/Owner.java new file mode 100644 index 00000000..af4e4c12 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/models/Owner.java @@ -0,0 +1,10 @@ +package com.daimajia.swipedemo.models; + +public class Owner { + public int reputation; + public long user_id; + public String user_type; + public String profile_image; + public String display_name; + public String link; +} diff --git a/demo/src/main/java/com/daimajia/swipedemo/models/StackApiResponse.java b/demo/src/main/java/com/daimajia/swipedemo/models/StackApiResponse.java new file mode 100644 index 00000000..ef1e18a3 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/models/StackApiResponse.java @@ -0,0 +1,10 @@ +package com.daimajia.swipedemo.models; + +import java.util.List; + +public class StackApiResponse { + public List items; + public boolean has_more; + public int quota_max; + public int quota_remaining; +} diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/Api.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/Api.java new file mode 100644 index 00000000..02255c56 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/Api.java @@ -0,0 +1,13 @@ +package com.daimajia.swipedemo.retrofit; + +import com.daimajia.swipedemo.models.StackApiResponse; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface Api { + + @GET("answers") + Call getAnswers(@Query("page") int page, @Query("pagesize") int pagesize, @Query("site") String site); +} diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSource.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSource.java new file mode 100644 index 00000000..e548e1f9 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSource.java @@ -0,0 +1,98 @@ +package com.daimajia.swipedemo.retrofit; + +import androidx.annotation.NonNull; +import androidx.paging.PageKeyedDataSource; + +import com.daimajia.swipedemo.models.Item; +import com.daimajia.swipedemo.models.StackApiResponse; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class ItemDataSource extends PageKeyedDataSource { + //the size of a page that we want + public static final int PAGE_SIZE = 50; + + //we will start from the first page which is 1 + private static final int FIRST_PAGE = 1; + + //we need to fetch from stackoverflow + private static final String SITE_NAME = "stackoverflow"; + + + //this will be called once to load the initial data + @Override + public void loadInitial(@NonNull LoadInitialParams params, @NonNull final LoadInitialCallback callback) { + RetrofitClient.getInstance() + .getApi().getAnswers(FIRST_PAGE, PAGE_SIZE, SITE_NAME) + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.body() != null) { + callback.onResult(response.body().items, null, FIRST_PAGE + 1); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + + //this will load the previous page + @Override + public void loadBefore(@NonNull final LoadParams params, @NonNull final LoadCallback callback) { + RetrofitClient.getInstance() + .getApi().getAnswers(params.key, PAGE_SIZE, SITE_NAME) + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + + //if the current page is greater than one + //we are decrementing the page number + //else there is no previous page + Integer adjacentKey = (params.key > 1) ? params.key - 1 : null; + if (response.body() != null) { + + //passing the loaded data + //and the previous page key + callback.onResult(response.body().items, adjacentKey); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + + //this will load the next page + @Override + public void loadAfter(@NonNull final LoadParams params, @NonNull final LoadCallback callback) { + RetrofitClient.getInstance() + .getApi() + .getAnswers(params.key, PAGE_SIZE, SITE_NAME) + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + + if (response.body() != null) { + //if the response has next page + //incrementing the next page number + Integer key = response.body().has_more ? params.key + 1 : null; + + //passing the loaded data and next page value + callback.onResult(response.body().items, key); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } +} diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSourceFactory.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSourceFactory.java new file mode 100644 index 00000000..6c32d4ae --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSourceFactory.java @@ -0,0 +1,32 @@ +package com.daimajia.swipedemo.retrofit; + + +import androidx.lifecycle.MutableLiveData; +import androidx.paging.DataSource; +import androidx.paging.PageKeyedDataSource; + +import com.daimajia.swipedemo.models.Item; + +public class ItemDataSourceFactory extends DataSource.Factory { + + //creating the mutable live data + private MutableLiveData> itemLiveDataSource = new MutableLiveData<>(); + + @Override + public DataSource create() { + //getting our data source object + ItemDataSource itemDataSource = new ItemDataSource(); + + //posting the datasource to get the values + itemLiveDataSource.postValue(itemDataSource); + + //returning the datasource + return itemDataSource; + } + + + //getter for itemlivedatasource + public MutableLiveData> getItemLiveDataSource() { + return itemLiveDataSource; + } +} diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemViewModel.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemViewModel.java new file mode 100644 index 00000000..dce30864 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemViewModel.java @@ -0,0 +1,35 @@ +package com.daimajia.swipedemo.retrofit; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.ViewModel; +import androidx.paging.LivePagedListBuilder; +import androidx.paging.PageKeyedDataSource; +import androidx.paging.PagedList; + +import com.daimajia.swipedemo.models.Item; + +public class ItemViewModel extends ViewModel { + + //creating livedata for PagedList and PagedKeyedDataSource + public LiveData> itemPagedList; + LiveData> liveDataSource; + + //constructor + public ItemViewModel() { + //getting our data source factory + ItemDataSourceFactory itemDataSourceFactory = new ItemDataSourceFactory(); + + //getting the live data source from data source factory + liveDataSource = itemDataSourceFactory.getItemLiveDataSource(); + + //Getting PagedList config + PagedList.Config pagedListConfig = + (new PagedList.Config.Builder()) + .setEnablePlaceholders(false) + .setPageSize(ItemDataSource.PAGE_SIZE).build(); + + //Building the paged list + itemPagedList = (new LivePagedListBuilder(itemDataSourceFactory, pagedListConfig)) + .build(); + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/RetrofitClient.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/RetrofitClient.java new file mode 100644 index 00000000..a1f16b39 --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/RetrofitClient.java @@ -0,0 +1,32 @@ +package com.daimajia.swipedemo.retrofit; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class RetrofitClient { + + private static final String BASE_URL = "https://api.stackexchange.com/2.2/"; + private static RetrofitClient mInstance; + private Retrofit retrofit; + + + private RetrofitClient() { + retrofit = new Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build(); + } + + public static synchronized RetrofitClient getInstance() { + if (mInstance == null) { + mInstance = new RetrofitClient(); + } + return mInstance; + } + + public Api getApi() { + return retrofit.create(Api.class); + } +} + diff --git a/demo/src/main/res/layout/recyclerview.xml b/demo/src/main/res/layout/recyclerview.xml index 3f1387f0..b72729d0 100644 --- a/demo/src/main/res/layout/recyclerview.xml +++ b/demo/src/main/res/layout/recyclerview.xml @@ -1,6 +1,5 @@ - - - + + + + + + + + + + + +