Repository: RaphetS/DemoRealm Branch: master Commit: 9fa27cfdb49b Files: 67 Total size: 84.3 KB Directory structure: gitextract__jjpfxqs/ ├── .gitignore ├── .idea/ │ ├── compiler.xml │ ├── copyright/ │ │ └── profiles_settings.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── org/ │ │ └── raphets/ │ │ └── demorealm/ │ │ └── ExampleInstrumentedTest.java │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── org/ │ │ │ └── raphets/ │ │ │ └── demorealm/ │ │ │ ├── MyApp.java │ │ │ ├── activity/ │ │ │ │ ├── AllDogActivity.java │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── ConditionQueryActivity.java │ │ │ │ ├── DogListActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── OtherQueryActivity.java │ │ │ │ ├── QueryActivity.java │ │ │ │ └── UpdateActivity.java │ │ │ ├── adapter/ │ │ │ │ ├── AsyncCatAdapter.java │ │ │ │ ├── BaseAdapter.java │ │ │ │ ├── BaseViewHolder.java │ │ │ │ ├── DogAdapter.java │ │ │ │ ├── LikeCatAdapter.java │ │ │ │ └── LikeDogAdapter.java │ │ │ ├── async/ │ │ │ │ ├── AddDeleteActivity.java │ │ │ │ ├── AsyncActivity.java │ │ │ │ ├── AsyncQueryActivity.java │ │ │ │ └── UpdateCatActivity.java │ │ │ ├── bean/ │ │ │ │ ├── Cat.java │ │ │ │ └── Dog.java │ │ │ └── util/ │ │ │ ├── DefaultItemTouchHelpCallback.java │ │ │ ├── RealmHelper.java │ │ │ └── ToastUtil.java │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── like_selector.xml │ │ │ └── stoke_bg.xml │ │ ├── layout/ │ │ │ ├── activity_add.xml │ │ │ ├── activity_add_delete.xml │ │ │ ├── activity_all_dog.xml │ │ │ ├── activity_async.xml │ │ │ ├── activity_async_query.xml │ │ │ ├── activity_condition_query.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_other_query.xml │ │ │ ├── activity_query.xml │ │ │ ├── activity_update.xml │ │ │ ├── activity_update_cat.xml │ │ │ ├── item_dog.xml │ │ │ └── toolbar.xml │ │ ├── values/ │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── values-w820dp/ │ │ └── dimens.xml │ └── test/ │ └── java/ │ └── org/ │ └── raphets/ │ └── demorealm/ │ └── ExampleUnitTest.java ├── build.gradle ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ *.iml .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build /captures .externalNativeBuild ================================================ FILE: .idea/compiler.xml ================================================ ================================================ FILE: .idea/copyright/profiles_settings.xml ================================================ ================================================ FILE: .idea/encodings.xml ================================================ ================================================ FILE: .idea/gradle.xml ================================================ ================================================ FILE: .idea/misc.xml ================================================ ================================================ FILE: .idea/modules.xml ================================================ ================================================ FILE: .idea/runConfigurations.xml ================================================ ================================================ FILE: .idea/vcs.xml ================================================ ================================================ FILE: README.md ================================================ ##Demo是以本地收藏为应用场景的,实现了对Realm的增删改查等操作,以及异步的增删改查操作,欢迎Star、Fork 使用详情请看我的简书http://www.jianshu.com/p/28912c2f31db ##DownloadDemo ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/demoURL.png) 效果图 ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%A2%9E%E5%88%A0%E6%9F%A5.gif) ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E6%94%B9.gif) ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%88%A0.gif) ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E6%9D%A1%E4%BB%B6%E6%9F%A5%E8%AF%A2.gif) ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%85%B6%E4%BB%96%E6%9F%A5%E8%AF%A2.gif) ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E5%A2%9E%E5%88%A0.gif) ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E6%9B%B4%E6%96%B0.gif) ![image](https://github.com/RaphetS/DemoRealm/blob/master/Screenshot/%E5%BC%82%E6%AD%A5%E5%88%A0.gif) ================================================ FILE: app/.gitignore ================================================ /build ================================================ FILE: app/build.gradle ================================================ apply plugin: 'com.android.application' apply plugin: 'realm-android' apply plugin: 'android-apt' android { compileSdkVersion 24 buildToolsVersion "24.0.2" defaultConfig { applicationId "org.raphets.demorealm" minSdkVersion 19 targetSdkVersion 24 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.0' testCompile 'junit:junit:4.12' compile 'com.android.support:recyclerview-v7:24.2.0' compile 'com.android.support:cardview-v7:24.2.0' compile 'com.jakewharton:butterknife:8.4.0' apt 'com.jakewharton:butterknife-compiler:8.4.0' compile 'com.android.support:design:24.2.0' } ================================================ FILE: app/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in D:\android\sdk/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the proguardFiles # directive in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} ================================================ FILE: app/src/androidTest/java/org/raphets/demorealm/ExampleInstrumentedTest.java ================================================ package org.raphets.demorealm; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.*; /** * Instrumentation test, which will execute on an Android device. * * @see Testing documentation */ @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { @Test public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); assertEquals("org.raphets.demorealm", appContext.getPackageName()); } } ================================================ FILE: app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: app/src/main/java/org/raphets/demorealm/MyApp.java ================================================ package org.raphets.demorealm; import android.app.Application; import org.raphets.demorealm.util.RealmHelper; import io.realm.Realm; import io.realm.RealmConfiguration; /** * Created by matou0289 on 2016/10/21. */ public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); Realm.init(this); RealmConfiguration configuration=new RealmConfiguration.Builder() .name(RealmHelper.DB_NAME) .deleteRealmIfMigrationNeeded() .build(); Realm.setDefaultConfiguration(configuration); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/activity/AllDogActivity.java ================================================ package org.raphets.demorealm.activity; import android.content.Intent; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.support.v7.widget.helper.ItemTouchHelper; import android.util.Log; import android.view.View; import org.raphets.demorealm.R; import org.raphets.demorealm.adapter.BaseAdapter; import org.raphets.demorealm.adapter.LikeDogAdapter; import org.raphets.demorealm.bean.Dog; import org.raphets.demorealm.util.DefaultItemTouchHelpCallback; import org.raphets.demorealm.util.RealmHelper; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; /** * 查询所有 */ public class AllDogActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @BindView(R.id.recyclerView) RecyclerView mRecyclerView; private List mDogs = new ArrayList<>(); private LikeDogAdapter mAdapter; private RealmHelper mRealmHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar, "查询所有"); initData(); addListener(); } private void initData() { mRealmHelper = new RealmHelper(this); mDogs = mRealmHelper.queryAllDog(); LinearLayoutManager manager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(manager); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mAdapter = new LikeDogAdapter(this, mDogs, R.layout.item_dog); mRecyclerView.setAdapter(mAdapter); setSwipeDelete(); Snackbar.make(mRecyclerView,"滑动删除item、点击Item进入修改界面",Snackbar.LENGTH_LONG).show(); } private void setSwipeDelete() { DefaultItemTouchHelpCallback mCallback = new DefaultItemTouchHelpCallback(new DefaultItemTouchHelpCallback.OnItemTouchCallbackListener() { @Override public void onSwiped(int adapterPosition) { //删除数据库数据 mRealmHelper.deleteDog(mDogs.get(adapterPosition).getId()); //滑动删除 mDogs.remove(adapterPosition); mAdapter.notifyItemRemoved(adapterPosition); } @Override public boolean onMove(int srcPosition, int targetPosition) { return false; } }); mCallback.setDragEnable(false); mCallback.setSwipeEnable(true); ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mCallback); itemTouchHelper.attachToRecyclerView(mRecyclerView); } private void addListener() { mAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Intent intent=new Intent(AllDogActivity.this,UpdateActivity.class); intent.putExtra("id",mDogs.get(position).getId()); startActivityForResult(intent,100); } }); } @Override public int getLayoutId() { return R.layout.activity_all_dog; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode==RESULT_OK&&requestCode==100){ mDogs.clear(); List dogs=mRealmHelper.queryAllDog(); mDogs.addAll(dogs); mAdapter.notifyDataSetChanged(); } } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/activity/BaseActivity.java ================================================ package org.raphets.demorealm.activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import butterknife.ButterKnife; /** * Created by matou0289 on 2016/10/20. */ public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutId()); ButterKnife.bind(this); } public abstract int getLayoutId(); protected void setToolbar(Toolbar toolbar,String title){ toolbar.setTitle(title); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/activity/ConditionQueryActivity.java ================================================ package org.raphets.demorealm.activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.Toast; import org.raphets.demorealm.R; import org.raphets.demorealm.adapter.LikeDogAdapter; import org.raphets.demorealm.bean.Dog; import org.raphets.demorealm.util.RealmHelper; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.OnClick; /** * 条件查询 */ public class ConditionQueryActivity extends BaseActivity { @BindView(R.id.et_id) EditText etId; @BindView(R.id.et_age) EditText etAge; @BindView(R.id.recyclerView) RecyclerView mRecyclerView; @BindView(R.id.toolBar) Toolbar mToolbar; private RealmHelper mRealmHelper; private List mDogs = new ArrayList<>(); private LikeDogAdapter mAdapter; @Override public int getLayoutId() { return R.layout.activity_condition_query; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar, "条件查询"); initData(); } @OnClick({R.id.btn_query_id, R.id.btn_query_age}) void onClick(View view) { switch (view.getId()) { case R.id.btn_query_id: queryById(); break; case R.id.btn_query_age: queryByAge(); break; default: break; } } private void initData() { mRealmHelper = new RealmHelper(this); mAdapter = new LikeDogAdapter(this, mDogs, R.layout.item_dog); LinearLayoutManager manager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(manager); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.setAdapter(mAdapter); } private void queryById() { String id = etId.getText().toString().trim(); if (TextUtils.isEmpty(id)) { Toast.makeText(ConditionQueryActivity.this, "请输入Id", Toast.LENGTH_SHORT).show(); return; } mDogs.clear(); Dog dog = mRealmHelper.queryDogById(id); if (dog != null) { mDogs.add(dog); } else { Toast.makeText(ConditionQueryActivity.this, "查询结果为空", Toast.LENGTH_SHORT).show(); } mAdapter.notifyDataSetChanged(); } private void queryByAge() { String age = etAge.getText().toString().trim(); if (TextUtils.isEmpty(age)) { Toast.makeText(ConditionQueryActivity.this, "请输入age", Toast.LENGTH_SHORT).show(); return; } mDogs.clear(); List dogs = mRealmHelper.queryDobByAge(Integer.parseInt(age)); if (dogs!=null) { mDogs.addAll(dogs); }else { Toast.makeText(ConditionQueryActivity.this, "查询结果为空", Toast.LENGTH_SHORT).show(); } mAdapter.notifyDataSetChanged(); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/activity/DogListActivity.java ================================================ package org.raphets.demorealm.activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import org.raphets.demorealm.R; import org.raphets.demorealm.adapter.DogAdapter; import org.raphets.demorealm.bean.Dog; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class DogListActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @BindView(R.id.recyclerView) RecyclerView mRecyclerView; private List mDogs = new ArrayList<>(); private DogAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar, "查询"); initData(); initRecyclerView(); } @Override public int getLayoutId() { return R.layout.activity_add; } private void initRecyclerView() { LinearLayoutManager layoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(layoutManager); mAdapter = new DogAdapter(this, mDogs, R.layout.item_dog); mRecyclerView.setAdapter(mAdapter); } private void initData() { Dog dog1 = new Dog(); dog1.setName("John"); dog1.setAge(1); dog1.setId("001"); Dog dog2 = new Dog(); dog2.setName("Kate"); dog2.setAge(2); dog2.setId("002"); Dog dog3 = new Dog(); dog3.setName("Amy"); dog3.setAge(2); dog3.setId("003"); Dog dog4 = new Dog(); dog4.setName("Kim"); dog4.setAge(3); dog4.setId("004"); Dog dog5 = new Dog(); dog5.setName("Mary"); dog5.setAge(1); dog5.setId("005"); Dog dog6 = new Dog(); dog6.setName("Michael"); dog6.setAge(2); dog6.setId("006"); Dog dog7 = new Dog(); dog7.setName("James"); dog7.setAge(3); dog7.setId("007"); Dog dog8 = new Dog(); dog8.setName("Paul"); dog8.setAge(1); dog8.setId("008"); Dog dog9 = new Dog(); dog9.setName("Lily"); dog9.setAge(1); dog9.setId("009"); mDogs.add(dog1); mDogs.add(dog2); mDogs.add(dog3); mDogs.add(dog4); mDogs.add(dog5); mDogs.add(dog6); mDogs.add(dog7); mDogs.add(dog8); mDogs.add(dog9); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/activity/MainActivity.java ================================================ package org.raphets.demorealm.activity; import android.content.Intent; import android.support.annotation.Nullable; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import org.raphets.demorealm.R; import org.raphets.demorealm.async.AsyncActivity; import butterknife.BindView; import butterknife.OnClick; import io.realm.Realm; /** * 主界面 */ public class MainActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mToolbar.setTitle("DemoRealm"); setSupportActionBar(mToolbar); } @Override public int getLayoutId() { return R.layout.activity_main; } @OnClick({R.id.btn_add, R.id.btn_query,R.id.btn_async}) void onClick(View view) { switch (view.getId()) { case R.id.btn_add: startActivity(new Intent(MainActivity.this,DogListActivity.class)); break; case R.id.btn_query: startActivity(new Intent(MainActivity.this,QueryActivity.class)); break; case R.id.btn_async: startActivity(new Intent(MainActivity.this,AsyncActivity.class)); break; default: break; } } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/activity/OtherQueryActivity.java ================================================ package org.raphets.demorealm.activity; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.widget.TextView; import org.raphets.demorealm.R; import org.raphets.demorealm.bean.Dog; import org.raphets.demorealm.util.RealmHelper; import butterknife.BindView; import io.realm.Realm; import io.realm.RealmResults; /** * 其他查询 */ public class OtherQueryActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @BindView(R.id.tv_average_age) TextView tvAverage;//平均年龄 @BindView(R.id.tv_sum_age) TextView tvSumAge;//总年龄 @BindView(R.id.tv_max_id) TextView tvMaxId; private Realm mRealm; @Override public int getLayoutId() { return R.layout.activity_other_query; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar,"其他查询"); mRealm=Realm.getDefaultInstance(); getAverageAge(); getSumAge(); getMaxId(); } /** * 查询平均年龄 */ private void getAverageAge() { double avgAge= mRealm.where(Dog.class).findAll().average("age"); tvAverage.setText(avgAge+"岁"); } /** * 查询总年龄 */ private void getSumAge() { Number sum= mRealm.where(Dog.class).findAll().sum("age"); int sumAge=sum.intValue(); tvSumAge.setText(sumAge+"岁"); } /** * 查询最大年龄 */ private void getMaxId(){ Number max= mRealm.where(Dog.class).findAll().max("age"); int maxAge=max.intValue(); tvMaxId.setText(maxAge+"岁"); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/activity/QueryActivity.java ================================================ package org.raphets.demorealm.activity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import org.raphets.demorealm.R; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /** * 查、改 */ public class QueryActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar,"改、查"); } @Override public int getLayoutId() { return R.layout.activity_query; } @OnClick({R.id.btn_query, R.id.btn_condition_query,R.id.btn_other_query}) void onClick(View view) { switch (view.getId()) { case R.id.btn_query: startActivity(new Intent(QueryActivity.this,AllDogActivity.class)); break; case R.id.btn_condition_query: startActivity(new Intent(QueryActivity.this,ConditionQueryActivity.class)); break; case R.id.btn_other_query: startActivity(new Intent(QueryActivity.this,OtherQueryActivity.class)); break; default: break; } } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/activity/UpdateActivity.java ================================================ package org.raphets.demorealm.activity; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.Toast; import org.raphets.demorealm.R; import org.raphets.demorealm.util.RealmHelper; import butterknife.BindView; import butterknife.OnClick; public class UpdateActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @BindView(R.id.et_name) EditText etName; private RealmHelper mRealmHelper; private String mId; @Override public int getLayoutId() { return R.layout.activity_update; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar, "改"); initData(); } private void initData() { mRealmHelper=new RealmHelper(this); mId=getIntent().getStringExtra("id"); } @OnClick(R.id.btn_update) void onClick(View v) { String name=etName.getText().toString().trim(); if (TextUtils.isEmpty(name)){ Toast.makeText(UpdateActivity.this,"请输入名称",Toast.LENGTH_SHORT).show(); return; } mRealmHelper.updateDog(mId,name); setResult(RESULT_OK); finish(); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/adapter/AsyncCatAdapter.java ================================================ package org.raphets.demorealm.adapter; import android.content.Context; import android.os.AsyncTask; import android.view.View; import android.widget.ImageView; import android.widget.Toast; import org.raphets.demorealm.R; import org.raphets.demorealm.bean.Cat; import org.raphets.demorealm.bean.Dog; import org.raphets.demorealm.util.ToastUtil; import java.util.List; import io.realm.Realm; import io.realm.RealmAsyncTask; import io.realm.RealmChangeListener; import io.realm.RealmModel; /** * Created by RaphetS on 2016/10/21. */ public class AsyncCatAdapter extends BaseAdapter { private Realm mRealm; private Context mContext; private RealmAsyncTask addTask; private RealmAsyncTask deleteTask; public AsyncCatAdapter(Context context, List mDatas, int mLayoutId) { super(context, mDatas, mLayoutId); mContext=context; mRealm=Realm.getDefaultInstance(); } @Override protected void convert(Context mContext, BaseViewHolder holder, final Cat cat) { holder.setText(R.id.tv_id,cat.getId()) .setText(R.id.tv_name,cat.getName()); final ImageView imageView=holder.getView(R.id.iv_like); if (isLiked(cat.getId())){ imageView.setSelected(true); }else { imageView.setSelected(false); } holder.setOnClickListener(R.id.iv_like, new View.OnClickListener() { @Override public void onClick(View v) { if (imageView.isSelected()){ deleteCat(cat.getId(),imageView); }else { addCat(cat,imageView); } } }); } private boolean isLiked( String id){ Cat cat= mRealm.where(Cat.class).equalTo("id",id).findFirst(); if (cat==null){ return false; }else { return true; } } private void addCat(final Cat cat, final ImageView imageView) { addTask= mRealm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm realm) { realm.copyToRealm(cat); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { ToastUtil.showShortToast(mContext,"收藏成功"); imageView.setSelected(true); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { ToastUtil.showShortToast(mContext,"收藏失败"); } }); } private void deleteCat(final String id, final ImageView imageView){ deleteTask= mRealm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm realm) { Cat cat=realm.where(Cat.class).equalTo("id",id).findFirst(); cat.deleteFromRealm(); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { ToastUtil.showShortToast(mContext,"取消收藏成功"); imageView.setSelected(false); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { ToastUtil.showShortToast(mContext,"取消收藏失败"); } }); } public void CancelTask(){ if (addTask!=null&&!addTask.isCancelled()){ addTask.cancel(); } if (deleteTask!=null&&!deleteTask.isCancelled()){ deleteTask.cancel(); } } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/adapter/BaseAdapter.java ================================================ package org.raphets.demorealm.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by RaphetS on 2016/9/28. * 普通的万能Adapter * 支持onItemClick * 支持onLongItemClick */ public abstract class BaseAdapter extends RecyclerView.Adapter { private Context mContext; private List mDatas; private int mLayoutId; private OnItemClickListener mItemClickListener; private onLongItemClickListener mLongItemClickListener; public BaseAdapter(Context mContext, List mDatas, int mLayoutId) { this.mContext = mContext; this.mDatas = mDatas; this.mLayoutId = mLayoutId; } public void updateData(List data) { mDatas.clear(); mDatas.addAll(data); notifyDataSetChanged(); } public void addAll(List data) { mDatas.addAll(data); notifyDataSetChanged(); } @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(mLayoutId, parent, false); BaseViewHolder holder = new BaseViewHolder(view); return holder; } @Override public int getItemCount() { return mDatas.size(); } @Override public void onBindViewHolder(BaseViewHolder holder, final int position) { convert(mContext, holder, mDatas.get(position)); if (mItemClickListener != null) { holder.mItemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mItemClickListener.onItemClick(v, position); } }); } if (mLongItemClickListener != null) { holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { mLongItemClickListener.onLongItemClick(v, position); return true; } }); } } protected abstract void convert(Context mContext, BaseViewHolder holder, T t); public interface OnItemClickListener { void onItemClick(View view, int position); } public interface onLongItemClickListener { void onLongItemClick(View view, int postion); } public void setOnItemClickListener(OnItemClickListener listener) { this.mItemClickListener = listener; } public void setonLongItemClickListener(onLongItemClickListener listener) { this.mLongItemClickListener = listener; } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/adapter/BaseViewHolder.java ================================================ package org.raphets.demorealm.adapter; import android.annotation.SuppressLint; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.v7.widget.RecyclerView; import android.text.SpannableStringBuilder; import android.util.SparseArray; import android.view.View; import android.view.animation.AlphaAnimation; import android.widget.Checkable; import android.widget.ImageView; import android.widget.TextView; public class BaseViewHolder extends RecyclerView.ViewHolder { SparseArray mViews; View mItemView; public BaseViewHolder(View itemView) { super(itemView); mItemView = itemView; mViews = new SparseArray<>(); } public T getView(int viewId) { View view = mViews.get(viewId); if (view == null) { view = mItemView.findViewById(viewId); mViews.put(viewId, view); } return (T) view; } public BaseViewHolder setText(int viewId, int resId) { TextView textView = getView(viewId); textView.setText(resId); return this; } public BaseViewHolder setText(int viewId, String text) { TextView textView = getView(viewId); textView.setText(text); return this; } public BaseViewHolder setText(int viewId, SpannableStringBuilder text) { TextView textView = getView(viewId); textView.setText(text); return this; } public BaseViewHolder setImageResource(int viewId, int resId) { ImageView view = getView(viewId); view.setImageResource(resId); return this; } public BaseViewHolder setImageBitmap(int viewId, Bitmap bitmap) { ImageView view = getView(viewId); view.setImageBitmap(bitmap); return this; } public BaseViewHolder setImageDrawable(int viewId, Drawable drawable) { ImageView view = getView(viewId); view.setImageDrawable(drawable); return this; } public BaseViewHolder setBackgroundColor(int viewId, int color) { View view = getView(viewId); view.setBackgroundColor(color); return this; } public BaseViewHolder setBackgroundResource(int viewId, int backgroundRes) { View view = getView(viewId); view.setBackgroundResource(backgroundRes); return this; } public BaseViewHolder setTextColor(int viewId, int textColor) { TextView view = getView(viewId); view.setTextColor(textColor); return this; } @SuppressLint("NewApi") public BaseViewHolder setAlpha(int viewId, float value) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getView(viewId).setAlpha(value); } else { // Pre-honeycomb hack to set Alpha value AlphaAnimation alpha = new AlphaAnimation(value, value); alpha.setDuration(0); alpha.setFillAfter(true); getView(viewId).startAnimation(alpha); } return this; } public BaseViewHolder setVisible(int viewId, int visible) { View view = getView(viewId); view.setVisibility(visible); return this; } public BaseViewHolder setTag(int viewId, Object tag) { View view = getView(viewId); view.setTag(tag); return this; } public BaseViewHolder setTag(int viewId, int key, Object tag) { View view = getView(viewId); view.setTag(key, tag); return this; } public BaseViewHolder setChecked(int viewId, boolean checked) { Checkable view = (Checkable) getView(viewId); view.setChecked(checked); return this; } /** * 关于事件监听 */ public BaseViewHolder setOnClickListener(int viewId, View.OnClickListener listener) { View view = getView(viewId); view.setOnClickListener(listener); return this; } public BaseViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) { View view = getView(viewId); view.setOnTouchListener(listener); return this; } public BaseViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) { View view = getView(viewId); view.setOnLongClickListener(listener); return this; } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/adapter/DogAdapter.java ================================================ package org.raphets.demorealm.adapter; import android.content.Context; import android.view.View; import android.widget.ImageView; import org.raphets.demorealm.R; import org.raphets.demorealm.bean.Dog; import org.raphets.demorealm.util.RealmHelper; import java.util.List; import io.realm.Realm; /** * Created by matou0289 on 2016/10/20. */ public class DogAdapter extends BaseAdapter { private RealmHelper mRealmHleper; public DogAdapter(Context mContext, List mDatas, int mLayoutId) { super(mContext, mDatas, mLayoutId); mRealmHleper = new RealmHelper(mContext); } @Override protected void convert(Context mContext, BaseViewHolder holder, final Dog dog) { holder.setText(R.id.tv_name, dog.getName()) .setText(R.id.tv_id, dog.getId()); final ImageView iv = holder.getView(R.id.iv_like); if (mRealmHleper.isDogExist(dog.getId())) { iv.setSelected(true); } else { iv.setSelected(false); } iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (iv.isSelected()) { iv.setSelected(false); mRealmHleper.deleteDog(dog.getId()); } else { iv.setSelected(true); mRealmHleper.addDog(dog); } } }); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/adapter/LikeCatAdapter.java ================================================ package org.raphets.demorealm.adapter; import android.content.Context; import android.view.View; import org.raphets.demorealm.R; import org.raphets.demorealm.bean.Cat; import java.util.List; /** * Created by RaphetS on 2016/10/21. */ public class LikeCatAdapter extends BaseAdapter { public LikeCatAdapter(Context mContext, List mDatas, int mLayoutId) { super(mContext, mDatas, mLayoutId); } @Override protected void convert(Context mContext, BaseViewHolder holder, Cat cat) { holder.setText(R.id.tv_name, cat.getName()) .setText(R.id.tv_id,cat.getId()) .setVisible(R.id.iv_like, View.INVISIBLE); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/adapter/LikeDogAdapter.java ================================================ package org.raphets.demorealm.adapter; import android.content.Context; import android.view.View; import android.widget.ImageView; import org.raphets.demorealm.R; import org.raphets.demorealm.bean.Dog; import java.util.List; /** * Created by matou0289 on 2016/10/20. */ public class LikeDogAdapter extends BaseAdapter { public LikeDogAdapter(Context mContext, List mDatas, int mLayoutId) { super(mContext, mDatas, mLayoutId); } @Override protected void convert(Context mContext, BaseViewHolder holder, Dog dog) { holder.setText(R.id.tv_name, dog.getName()) .setText(R.id.tv_id,dog.getId()) .setVisible(R.id.iv_like, View.INVISIBLE); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/async/AddDeleteActivity.java ================================================ package org.raphets.demorealm.async; import android.support.annotation.Nullable; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import org.raphets.demorealm.R; import org.raphets.demorealm.activity.BaseActivity; import org.raphets.demorealm.adapter.AsyncCatAdapter; import org.raphets.demorealm.bean.Cat; import java.util.ArrayList; import java.util.List; import butterknife.BindView; public class AddDeleteActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @BindView(R.id.recyclerView) RecyclerView mRecyclerView; private List mCats=new ArrayList<>(); private String[] letters=new String[]{"A","B","C","D","E","F","G","H","I","J","K","M","N","U","X","Y","Z"}; private String[] letters1=new String[]{"a","c","u","p","q","y"}; private AsyncCatAdapter mAdapter; @Override public int getLayoutId() { return R.layout.activity_add_delete; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar,"异步增、删"); initData(); setRecyclerView(); } private void setRecyclerView() { LinearLayoutManager manager=new LinearLayoutManager(this); mRecyclerView.setLayoutManager(manager); mAdapter=new AsyncCatAdapter(this,mCats,R.layout.item_dog); mRecyclerView.setAdapter(mAdapter); } private void initData() { for (int i=0;i<15;i++){ Cat cat=new Cat(); String name=letters[i]+letters1[i%5]+letters1[i%3]; cat.setName(name); cat.setAge(i%4); cat.setId("10"+i); mCats.add(cat); } } @Override protected void onDestroy() { super.onDestroy(); mAdapter.CancelTask(); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/async/AsyncActivity.java ================================================ package org.raphets.demorealm.async; import android.content.Intent; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import org.raphets.demorealm.R; import org.raphets.demorealm.activity.BaseActivity; import butterknife.BindView; import butterknife.OnClick; public class AsyncActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @Override public int getLayoutId() { return R.layout.activity_async; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar,"异步操作"); } @OnClick({R.id.btn_add_delete,R.id.btn_update_query}) void onClick(View view){ switch (view.getId()){ case R.id.btn_add_delete: startActivity(new Intent(AsyncActivity.this,AddDeleteActivity.class)); break; case R.id.btn_update_query: startActivity(new Intent(AsyncActivity.this,AsyncQueryActivity.class)); break; default: break; } } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/async/AsyncQueryActivity.java ================================================ package org.raphets.demorealm.async; import android.content.Intent; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.support.v7.widget.helper.ItemTouchHelper; import android.util.Log; import android.view.View; import org.raphets.demorealm.R; import org.raphets.demorealm.activity.BaseActivity; import org.raphets.demorealm.adapter.BaseAdapter; import org.raphets.demorealm.adapter.LikeCatAdapter; import org.raphets.demorealm.bean.Cat; import org.raphets.demorealm.util.DefaultItemTouchHelpCallback; import org.raphets.demorealm.util.ToastUtil; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import io.realm.Realm; import io.realm.RealmAsyncTask; import io.realm.RealmChangeListener; import io.realm.RealmResults; public class AsyncQueryActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @BindView(R.id.recyclerView) RecyclerView mRecyclerView; private Realm mRealm; private List mCats=new ArrayList<>(); private LikeCatAdapter mAdapter; private RealmResults cats; private RealmAsyncTask deleteTask; @Override public int getLayoutId() { return R.layout.activity_async_query; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setToolbar(mToolbar,"异步查、改"); mRealm=Realm.getDefaultInstance(); initRecyclerView(); getData(); addListener(); } private void initRecyclerView() { LinearLayoutManager manager=new LinearLayoutManager(this); mRecyclerView.setLayoutManager(manager); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mAdapter=new LikeCatAdapter(this,mCats,R.layout.item_dog); mRecyclerView.setAdapter(mAdapter); setSwipeDelete(); } private void getData() { cats=mRealm.where(Cat.class).findAllAsync(); cats.addChangeListener(new RealmChangeListener>() { @Override public void onChange(RealmResults element) { Log.i("TAG","111111111"); element= element.sort("id"); List datas=mRealm.copyFromRealm(element); mCats.clear(); mCats.addAll(datas); mAdapter.notifyDataSetChanged(); } }); } private void addListener() { mAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Intent intent=new Intent(AsyncQueryActivity.this,UpdateCatActivity.class); intent.putExtra("id",mCats.get(position).getId()); startActivityForResult(intent,100); } }); } private void setSwipeDelete() { DefaultItemTouchHelpCallback mCallback = new DefaultItemTouchHelpCallback(new DefaultItemTouchHelpCallback.OnItemTouchCallbackListener() { @Override public void onSwiped(int adapterPosition) { deleteCat(mCats.get(adapterPosition).getId()); mCats.remove(adapterPosition); mAdapter.notifyItemRemoved(adapterPosition); } @Override public boolean onMove(int srcPosition, int targetPosition) { return false; } }); mCallback.setDragEnable(false); mCallback.setSwipeEnable(true); ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mCallback); itemTouchHelper.attachToRecyclerView(mRecyclerView); } private void deleteCat(final String id) { deleteTask= mRealm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm realm) { Cat cat=realm.where(Cat.class).equalTo("id",id).findFirst(); if (cat!=null){ cat.deleteFromRealm(); } } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { ToastUtil.showShortToast(AsyncQueryActivity.this,"删除成功"); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { ToastUtil.showShortToast(AsyncQueryActivity.this,"删除失败"); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode==RESULT_OK&&requestCode==100){ mCats.clear(); getData(); } } @Override protected void onDestroy() { super.onDestroy(); cats.removeChangeListeners(); if (deleteTask!=null&&!deleteTask.isCancelled()){ deleteTask.cancel(); } } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/async/UpdateCatActivity.java ================================================ package org.raphets.demorealm.async; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import org.raphets.demorealm.R; import org.raphets.demorealm.activity.BaseActivity; import org.raphets.demorealm.bean.Cat; import org.raphets.demorealm.util.ToastUtil; import butterknife.BindView; import butterknife.OnClick; import io.realm.Realm; import io.realm.RealmAsyncTask; public class UpdateCatActivity extends BaseActivity { @BindView(R.id.toolBar) Toolbar mToolbar; @BindView(R.id.et_name) EditText etName; private Realm mRealm; private String mId; private RealmAsyncTask updateTask; @Override public int getLayoutId() { return R.layout.activity_update_cat; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initData(); } private void initData() { setToolbar(mToolbar,"异步更新"); mId=getIntent().getStringExtra("id"); mRealm=Realm.getDefaultInstance(); } @OnClick(R.id.btn_update) void onClick(View view){ final String name=etName.getText().toString().trim(); if (TextUtils.isEmpty(name)){ ToastUtil.showShortToast(UpdateCatActivity.this,"请输入新的Name"); return; } updateTask= mRealm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm realm) { Cat cat=realm.where(Cat.class).equalTo("id",mId).findFirst(); cat.setName(name); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { ToastUtil.showShortToast(UpdateCatActivity.this,"更新成功"); setResult(RESULT_OK); finish(); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { ToastUtil.showShortToast(UpdateCatActivity.this,"失败成功"); } }); } @Override protected void onDestroy() { super.onDestroy(); if (updateTask!=null&&!updateTask.isCancelled()){ updateTask.cancel(); } } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/bean/Cat.java ================================================ package org.raphets.demorealm.bean; import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; /** * Created by RaphetS on 2016/10/21. */ public class Cat extends RealmObject { private String name; private int age; @PrimaryKey private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/bean/Dog.java ================================================ package org.raphets.demorealm.bean; import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; /** * Created by matou0289 on 2016/10/20. */ public class Dog extends RealmObject { private String name; private int age; @PrimaryKey private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/util/DefaultItemTouchHelpCallback.java ================================================ package org.raphets.demorealm.util; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; public class DefaultItemTouchHelpCallback extends ItemTouchHelper.Callback { /** * Item操作的回调 */ private OnItemTouchCallbackListener onItemTouchCallbackListener; /** * 是否可以拖拽 */ private boolean isCanDrag = true; /** * 是否可以被滑动 */ private boolean isCanSwipe = true; public DefaultItemTouchHelpCallback(OnItemTouchCallbackListener onItemTouchCallbackListener) { this.onItemTouchCallbackListener = onItemTouchCallbackListener; } /** * 设置Item操作的回调,去更新UI和数据源 * * @param onItemTouchCallbackListener */ public void setOnItemTouchCallbackListener(OnItemTouchCallbackListener onItemTouchCallbackListener) { this.onItemTouchCallbackListener = onItemTouchCallbackListener; } /** * 设置是否可以被拖拽 * * @param canDrag 是true,否false */ public void setDragEnable(boolean canDrag) { isCanDrag = canDrag; } /** * 设置是否可以被滑动 * * @param canSwipe 是true,否false */ public void setSwipeEnable(boolean canSwipe) { isCanSwipe = canSwipe; } /** * 当Item被长按的时候是否可以被拖拽 * * @return */ @Override public boolean isLongPressDragEnabled() { return isCanDrag; } /** * Item是否可以被滑动(H:左右滑动,V:上下滑动) * * @return */ @Override public boolean isItemViewSwipeEnabled() { return isCanSwipe; } /** * 当用户拖拽或者滑动Item的时候需要我们告诉系统滑动或者拖拽的方向 * * @param recyclerView * @param viewHolder * @return */ @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) {// GridLayoutManager // flag如果值是0,相当于这个功能被关闭 int dragFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP | ItemTouchHelper.DOWN; int swipeFlag = 0; // create make return makeMovementFlags(dragFlag, swipeFlag); } else if (layoutManager instanceof LinearLayoutManager) {// linearLayoutManager LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager; int orientation = linearLayoutManager.getOrientation(); int dragFlag = 0; int swipeFlag = 0; // 为了方便理解,相当于分为横着的ListView和竖着的ListView if (orientation == LinearLayoutManager.HORIZONTAL) {// 如果是横向的布局 swipeFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN; dragFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; } else if (orientation == LinearLayoutManager.VERTICAL) {// 如果是竖向的布局,相当于ListView dragFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN; swipeFlag = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; } return makeMovementFlags(dragFlag, swipeFlag); } return 0; } /** * 当Item被拖拽的时候被回调 * * @param recyclerView recyclerView * @param srcViewHolder 拖拽的ViewHolder * @param targetViewHolder 目的地的viewHolder * @return */ @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder srcViewHolder, RecyclerView.ViewHolder targetViewHolder) { if (onItemTouchCallbackListener != null) { return onItemTouchCallbackListener.onMove(srcViewHolder.getAdapterPosition(), targetViewHolder.getAdapterPosition()); } return false; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { if (onItemTouchCallbackListener != null) { onItemTouchCallbackListener.onSwiped(viewHolder.getAdapterPosition()); } } public interface OnItemTouchCallbackListener { /** * 当某个Item被滑动删除的时候 * * @param adapterPosition item的position */ void onSwiped(int adapterPosition); /** * 当两个Item位置互换的时候被回调 * * @param srcPosition 拖拽的item的position * @param targetPosition 目的地的Item的position * @return 开发者处理了操作应该返回true,开发者没有处理就返回false */ boolean onMove(int srcPosition, int targetPosition); } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/util/RealmHelper.java ================================================ package org.raphets.demorealm.util; import android.content.Context; import org.raphets.demorealm.bean.Dog; import java.util.List; import io.realm.Realm; import io.realm.RealmConfiguration; import io.realm.RealmResults; import io.realm.Sort; /** * Created by matou0289 on 2016/10/20. */ public class RealmHelper { public static final String DB_NAME = "myRealm.realm"; private Realm mRealm; public RealmHelper(Context context) { mRealm = Realm.getDefaultInstance(); } /** * add (增) */ public void addDog(final Dog dog) { mRealm.beginTransaction(); mRealm.copyToRealm(dog); mRealm.commitTransaction(); } /** * delete (删) */ public void deleteDog(String id) { Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst(); mRealm.beginTransaction(); dog.deleteFromRealm(); mRealm.commitTransaction(); } /** * update (改) */ public void updateDog(String id, String newName) { Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst(); mRealm.beginTransaction(); dog.setName(newName); mRealm.commitTransaction(); } /** * query (查询所有) */ public List queryAllDog() { RealmResults dogs = mRealm.where(Dog.class).findAll(); /** * 对查询结果,按Id进行排序,只能对查询结果进行排序 */ //增序排列 dogs=dogs.sort("id"); // //降序排列 // dogs=dogs.sort("id", Sort.DESCENDING); return mRealm.copyFromRealm(dogs); } /** * query (根据Id(主键)查) */ public Dog queryDogById(String id) { Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst(); return dog; } /** * query (根据age查) */ public List queryDobByAge(int age) { RealmResults dogs = mRealm.where(Dog.class).equalTo("age", age).findAll(); return mRealm.copyFromRealm(dogs); } public boolean isDogExist(String id){ Dog dog=mRealm.where(Dog.class).equalTo("id",id).findFirst(); if (dog==null){ return false; }else { return true; } } public Realm getRealm(){ return mRealm; } public void close(){ if (mRealm!=null){ mRealm.close(); } } } ================================================ FILE: app/src/main/java/org/raphets/demorealm/util/ToastUtil.java ================================================ package org.raphets.demorealm.util; import android.content.Context; import android.widget.Toast; /** * Created by RaphetS on 2016/10/21. */ public class ToastUtil { private static Toast mToast; public static void showShortToast(Context context,String msg){ if (mToast==null){ mToast=Toast.makeText(context,msg,Toast.LENGTH_SHORT); } mToast.setText(msg); mToast.show(); } } ================================================ FILE: app/src/main/res/drawable/like_selector.xml ================================================ ================================================ FILE: app/src/main/res/drawable/stoke_bg.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_add.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_add_delete.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_all_dog.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_async.xml ================================================