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

效果图








================================================
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
================================================
================================================
FILE: app/src/main/res/layout/activity_async_query.xml
================================================
================================================
FILE: app/src/main/res/layout/activity_condition_query.xml
================================================
================================================
FILE: app/src/main/res/layout/activity_main.xml
================================================
================================================
FILE: app/src/main/res/layout/activity_other_query.xml
================================================
================================================
FILE: app/src/main/res/layout/activity_query.xml
================================================
================================================
FILE: app/src/main/res/layout/activity_update.xml
================================================
================================================
FILE: app/src/main/res/layout/activity_update_cat.xml
================================================
================================================
FILE: app/src/main/res/layout/item_dog.xml
================================================
================================================
FILE: app/src/main/res/layout/toolbar.xml
================================================
================================================
FILE: app/src/main/res/values/colors.xml
================================================
#3F51B5
#303F9F
@android:color/holo_blue_bright
================================================
FILE: app/src/main/res/values/dimens.xml
================================================
16dp
16dp
================================================
FILE: app/src/main/res/values/strings.xml
================================================
DemoRealm
================================================
FILE: app/src/main/res/values/styles.xml
================================================
================================================
FILE: app/src/main/res/values-w820dp/dimens.xml
================================================
64dp
================================================
FILE: app/src/test/java/org/raphets/demorealm/ExampleUnitTest.java
================================================
package org.raphets.demorealm;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see Testing documentation
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.1'
classpath "io.realm:realm-gradle-plugin:2.0.2"
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
================================================
FILE: gradlew
================================================
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: settings.gradle
================================================
include ':app'