自定義介面利用觀察者模式在第二個頁面向第一個頁面傳送資料
阿新 • • 發佈:2019-01-08
這裡不用Intent傳值,主要簡單介紹下interface的使用
效果如下:
首先新建兩個頁面MainActivity和HomeActivity,佈局很簡單,TextView和Button,看也看出來了,不多說了
接著建立一個觀察者介面:
public interface Watcher { void update(String str); }
然後是被觀察者:
public interface Watched { public void addWatcher(Watcher wtcher); public void notifyWatcher(String str);}
然後宣告具體的被觀察者:
public class ConcreateWatched implements Watched { private List<Watcher> list = new ArrayList<>(); @Override public void addWatcher(Watcher watcher) { list.add(watcher); } @Override public void notifyWatcher(String str) { for (Watcher watcher : list) { watcher.update(str); } } }
緊接著,宣告具體的觀察者,也就是我們的MainActivity:
public class MainActivity extends AppCompatActivity implements Watcher{ private static final String TAG = "TAG"; @BindView(R.id.tv_first) TextView tvFirst; public static String text = "資料:"; @Override protected voidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick(R.id.btn_firstJump) public void onViewClicked() { Intent intent = new Intent(this,HomeActivity.class); startActivity(intent); } @Override public void update(String str) { text = str; } @Override protected void onResume() { super.onResume(); Log.e(TAG, "onResume: " ); tvFirst.setText(text); } private long exitTime = 0;//點選2次返回,退出程式 //點選兩次退出 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if ((System.currentTimeMillis() - exitTime) > 2000) {//兩秒內再次點選返回則退出 Toast.makeText(getApplicationContext(), "再按一次退出程式", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { System.exit(0); } return true; } return super.onKeyDown(keyCode, event); } }
最後在HomeActivity裡回撥介面就可以了:
public class HomeActivity extends AppCompatActivity { Watched watched; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); ButterKnife.bind(this); watched = new ConcreateWatched(); Watcher watcher = new MainActivity(); watched.addWatcher(watcher); watched.notifyWatcher("資料:我是第二個頁面的資料"); } @OnClick(R.id.btn_return) public void onViewClicked() { finish(); } }
這裡只是簡單介紹介面的用法,一般用在Activity上點選,然後fragment某個控價發生變化時可以用,那個時候intent不能用了吧!
僅供參考,有不對的歡迎提出。