* Created by wangchenlong on 16/1/25. */ public class BindingActivity extends AppCompatActivity { @Bind(R.id.rxbinding_t_toolbar) Toolbar mTToolbar; @Bind(R.id.rxbinding_fab_fab) FloatingActionButton mFabFab; @Bind(R.id.rxbinding_et_usual_approach) EditText mEtUsualApproach; @Bind(R.id.rxbinding_et_reactive_approach) EditText mEtReactiveApproach; @Bind(R.id.rxbinding_tv_show) TextView mTvShow; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_binding); ButterKnife.bind(this); initToolbar(); // 初始化Toolbar initFabButton(); // 初始化Fab按钮 initEditText(); // 初始化编辑文本 } private void initToolbar() { setSupportActionBar(mTToolbar); // 添加Toolbar RxToolbar.itemClicks(mTToolbar).subscribe(this::onToolbarItemClicked); } private void onToolbarItemClicked(MenuItem menuItem) { String m = "点击\"" + menuItem.getTitle() + "\""; Toast.makeText(this, m, Toast.LENGTH_SHORT).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_rxbinding, menu); return super.onCreateOptionsMenu(menu); } // 初始化Fab按钮 private void initFabButton() { RxView.clicks(mFabFab).subscribe(this::onFabClicked); } // 点击Fab按钮 private void onFabClicked(Void v) { Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "点击Snackbar", Snackbar.LENGTH_SHORT); snackbar.show(); RxSnackbar.dismisses(snackbar).subscribe(this::onSnackbarDismissed); } // 销毁Snackbar, event参考{Snackbar} private void onSnackbarDismissed(int event) { String text = "Snackbar消失代码:" + event; Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); } // 初始化编辑文本 private void initEditText() { // 正常方式 mEtUsualApproach.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { mTvShow.setText(s); } @Override public void afterTextChanged(Editable s) { } }); // Rx方式 RxTextView.textChanges(mEtReactiveApproach).subscribe(mTvShow::setText); } } ================================================ FILE: app/src/main/java/org/wangchenlong/testdetailrxandroid/LambdaActivity.java ================================================ package org.wangchenlong.testdetailrxandroid; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; import java.util.Arrays; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; /** * Lambda表达式写法 *
* Created by wangchenlong on 15/12/31.
*/
public class LambdaActivity extends Activity {
@Bind(R.id.simple_tv_text) TextView mTvText;
final String[] mManyWords = {"Hello", "I", "am", "your", "friend", "Spike"};
final List
* Created by wangchenlong on 15/12/30.
*/
public class MoreActivity extends Activity {
@Bind(R.id.simple_tv_text) TextView mTvText;
final String[] mManyWords = {"Hello", "I", "am", "your", "friend", "Spike"};
final List
* Created by wangchenlong on 15/12/31.
*/
public class NetworkActivity extends Activity {
@Bind(R.id.network_rv_list) RecyclerView mRvList; // 列表
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network);
ButterKnife.bind(this);
// 设置Layout管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRvList.setLayoutManager(layoutManager);
// 设置适配器
UserListAdapter adapter = new UserListAdapter(this::gotoDetailPage);
NetworkWrapper.getUsersInto(adapter); // 加载网络信息
mRvList.setAdapter(adapter);
}
// 点击的回调
public interface UserClickCallback {
void onItemClicked(String name);
}
// 跳转到库详情页面
private void gotoDetailPage(String name) {
startActivity(NetworkDetailActivity.from(NetworkActivity.this, name));
}
}
================================================
FILE: app/src/main/java/org/wangchenlong/testdetailrxandroid/NetworkDetailActivity.java
================================================
package org.wangchenlong.testdetailrxandroid;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import butterknife.Bind;
import butterknife.ButterKnife;
import org.wangchenlong.testdetailrxandroid.networks.NetworkWrapper;
import org.wangchenlong.testdetailrxandroid.networks.RepoListAdapter;
/**
* GitHub的库详细页面
*
* Created by wangchenlong on 15/12/31.
*/
public class NetworkDetailActivity extends Activity {
private static final String USER_KEY = "network_detail_activity.user";
@Bind(R.id.network_rv_list) RecyclerView mRvList;
public static Intent from(Context context, String username) {
Intent intent = new Intent(context, NetworkDetailActivity.class);
intent.putExtra(USER_KEY, username);
return intent;
}
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network);
ButterKnife.bind(this);
// 设置布局
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);
mRvList.setLayoutManager(manager);
// 设置Adapter
RepoListAdapter adapter = new RepoListAdapter();
NetworkWrapper.getReposInfo(getIntent().getStringExtra(USER_KEY), adapter);
mRvList.setAdapter(adapter);
}
}
================================================
FILE: app/src/main/java/org/wangchenlong/testdetailrxandroid/SafeActivity.java
================================================
package org.wangchenlong.testdetailrxandroid;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.trello.rxlifecycle.components.support.RxAppCompatActivity;
import java.util.concurrent.TimeUnit;
import butterknife.Bind;
import butterknife.ButterKnife;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
/**
* Rx的线程安全
*
* Created by wangchenlong on 15/12/31.
*/
public class SafeActivity extends RxAppCompatActivity {
private static final String TAG = "DEBUG-WCL: " + SafeActivity.class.getSimpleName();
@Bind(R.id.simple_tv_text) TextView mTvText;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple);
ButterKnife.bind(this);
Observable.interval(1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.compose(bindToLifecycle()) // 管理生命周期, 防止内存泄露
.subscribe(this::showTime);
}
private void showTime(Long time) {
mTvText.setText(String.valueOf("时间计数: " + time));
Log.d(TAG, "时间计数器: " + time);
}
@Override
protected void onPause() {
super.onPause();
Log.w(TAG, "页面关闭!");
}
}
================================================
FILE: app/src/main/java/org/wangchenlong/testdetailrxandroid/SimpleActivity.java
================================================
package org.wangchenlong.testdetailrxandroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.Bind;
import butterknife.ButterKnife;
import rx.Observable;
import rx.Scheduler;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* RxJava的基础讲解, 包含一个观察者(Observable), 两个订阅者(Subscriber).
*
* Created by wangchenlong on 15/12/30.
*/
public class SimpleActivity extends Activity {
@Bind(R.id.simple_tv_text) TextView mTvText;
// 观察事件发生
private Observable.OnSubscribe
* Created by wangchenlong on 15/12/31.
*/
public interface GitHubService {
String ENDPOINT = "https://api.github.com";
@GET("/users/{user}") // 获取个人信息
Observable
* Created by wangchenlong on 15/12/31.
*/
public class NetworkWrapper {
private static final String[] mFamousUsers =
{"SpikeKing", "JakeWharton", "rock3r", "Takhion", "dextorer", "Mariuxtheone"};
// 获取用户信息
public static void getUsersInto(final UserListAdapter adapter) {
GitHubService gitHubService =
ServiceFactory.createServiceFrom(GitHubService.class, GitHubService.ENDPOINT);
Observable.from(mFamousUsers)
.flatMap(gitHubService::getUserData)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(adapter::addUser);
}
// 获取库信息
public static void getReposInfo(final String username, final RepoListAdapter adapter) {
GitHubService gitHubService =
ServiceFactory.createServiceFrom(GitHubService.class, GitHubService.ENDPOINT);
gitHubService.getRepoData(username)
.flatMap(Observable::from)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(adapter::addRepo);
}
}
================================================
FILE: app/src/main/java/org/wangchenlong/testdetailrxandroid/networks/RepoListAdapter.java
================================================
package org.wangchenlong.testdetailrxandroid.networks;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.wangchenlong.testdetailrxandroid.R;
import java.util.ArrayList;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* 库的适配器
*
* Created by wangchenlong on 15/12/31.
*/
public class RepoListAdapter extends RecyclerView.Adapter
* Created by wangchenlong on 15/12/31.
*/
public class ServiceFactory {
public static
* Created by wangchenlong on 15/12/31.
*/
public class UserListAdapter extends RecyclerView.Adapter, Observable
, Observable