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