From 897cdb295354cf8d8806270302cd7697cd76c54e Mon Sep 17 00:00:00 2001 From: Kazuki Yamaguchi Date: Tue, 15 Sep 2015 18:40:47 +0900 Subject: データバインディングを使い始めた MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smileessence/activity/EditCommandActivity.java | 2 +- .../net/lacolaco/smileessence/entity/Account.java | 4 +- .../view/adapter/CustomListAdapter.java | 2 +- .../smileessence/viewmodel/CheckBoxModel.java | 64 ++++++++++++++++------ .../smileessence/viewmodel/MessageViewModel.java | 22 +++----- 5 files changed, 58 insertions(+), 36 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java index 13c21d0f..ad19ae61 100644 --- a/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java +++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java @@ -106,7 +106,7 @@ public class EditCommandActivity extends Activity { @Override protected void onDestroy() { for (int i = 0; i < adapter.getCount(); i++) { - CheckBoxModel checkBoxModel = (CheckBoxModel) adapter.getItem(i); + CheckBoxModel checkBoxModel = adapter.getItem(i); Command command = editedCommands.get(i); CommandSetting.setVisible(command.getKey(), checkBoxModel.isChecked()); } diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Account.java b/app/src/main/java/net/lacolaco/smileessence/entity/Account.java index d5cc6b1b..99a78a5a 100644 --- a/app/src/main/java/net/lacolaco/smileessence/entity/Account.java +++ b/app/src/main/java/net/lacolaco/smileessence/entity/Account.java @@ -140,7 +140,7 @@ public class Account extends Model { } } - public void fetchTweet(long statusId, Consumer callback, boolean forceRetrieve) { + public void fetchTweet(long statusId, boolean forceRetrieve, Consumer callback) { Tweet tweet = Tweet.fetch(statusId); if (forceRetrieve || tweet == null) { new ShowStatusTask(getTwitter(), statusId) { @@ -154,7 +154,7 @@ public class Account extends Model { } } public void fetchTweet(long statusId, Consumer callback) { - fetchTweet(statusId, callback, false); + fetchTweet(statusId, false, callback); } public TwitterTask tryGetStatus(long statusID, final StatusCallback callback) { diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java index 16691238..bfdacce8 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java @@ -82,7 +82,7 @@ public class CustomListAdapter extends BaseAdapter { // --------------------- Interface Adapter --------------------- @Override - public Object getItem(int position) { + public T getItem(int position) { return frozenList.get(position); } diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/CheckBoxModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/CheckBoxModel.java index 08b3ad7e..015f206f 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/CheckBoxModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/CheckBoxModel.java @@ -25,35 +25,37 @@ package net.lacolaco.smileessence.viewmodel; import android.app.Activity; +import android.databinding.*; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; +import net.lacolaco.smileessence.BR; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.databinding.MenuItemCheckboxBinding; public class CheckBoxModel implements IViewModel { // ------------------------------ FIELDS ------------------------------ - private final String text; - private boolean checked; + private final CheckedState state; // --------------------------- CONSTRUCTORS --------------------------- - public CheckBoxModel(String text, boolean isChecked) { - this.text = text; - checked = isChecked; + public CheckBoxModel(String _text, boolean _checked) { + state = new CheckedState(_text, _checked); } // --------------------- GETTER / SETTER METHODS --------------------- public boolean isChecked() { - return checked; + return state.isChecked(); } - public void setChecked(boolean checked) { - this.checked = checked; + public void setChecked(boolean _checked) { + state.setChecked(_checked); } // ------------------------ INTERFACE METHODS ------------------------ @@ -64,17 +66,43 @@ public class CheckBoxModel implements IViewModel { @Override public View getView(Activity activity, LayoutInflater inflater, View convertedView) { if (convertedView == null) { - convertedView = inflater.inflate(R.layout.menu_item_checkbox, null); + MenuItemCheckboxBinding binding = MenuItemCheckboxBinding.inflate(inflater, null, false); + convertedView = binding.getRoot(); + convertedView.setTag(binding); } - CheckBox checkBox = (CheckBox) convertedView.findViewById(R.id.checkBox_menuItem); - checkBox.setText(this.text); - checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - CheckBoxModel.this.checked = isChecked; - } - }); - checkBox.setChecked(checked); + + MenuItemCheckboxBinding binding = (MenuItemCheckboxBinding) convertedView.getTag(); + binding.setCheckedState(state); return convertedView; } + + public static class CheckedState extends BaseObservable { + private String text; + private boolean checked; + + CheckedState(String _text, boolean _checked) { + text = _text; + checked = _checked; + } + + @Bindable + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + notifyPropertyChanged(BR.text); + } + + @Bindable + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + notifyPropertyChanged(BR.checked); + } + } } diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java index b6c640b5..5f1f2e8c 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java @@ -96,13 +96,10 @@ public class MessageViewModel implements IViewModel { int theme = ((MainActivity) activity).getThemeIndex(); NetworkImageView icon = (NetworkImageView) convertedView.findViewById(R.id.imageview_status_icon); ImageCache.getInstance().setImageToView(directMessage.getSender().getProfileImageUrl(), icon); - icon.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - UserDetailDialogFragment dialogFragment = new UserDetailDialogFragment(); - dialogFragment.setUserID(directMessage.getSender().getId()); - DialogHelper.showDialog(activity, dialogFragment); - } + icon.setOnClickListener(v -> { + UserDetailDialogFragment dialogFragment = new UserDetailDialogFragment(); + dialogFragment.setUserID(directMessage.getSender().getId()); + DialogHelper.showDialog(activity, dialogFragment); }); TextView header = (TextView) convertedView.findViewById(R.id.textview_status_header); header.setTextSize(textSize); @@ -123,13 +120,10 @@ public class MessageViewModel implements IViewModel { favorited.setVisibility(View.GONE); int colorBgMessage = Themes.getStyledColor(activity, theme, R.attr.color_message_bg_normal, 0); convertedView.setBackgroundColor(colorBgMessage); - convertedView.setOnClickListener(new ListItemClickListener(activity, new Runnable() { - @Override - public void run() { - MessageDetailDialogFragment dialogFragment = new MessageDetailDialogFragment(); - dialogFragment.setMessageID(directMessage.getId()); - DialogHelper.showDialog(activity, dialogFragment); - } + convertedView.setOnClickListener(new ListItemClickListener(activity, () -> { + MessageDetailDialogFragment dialogFragment = new MessageDetailDialogFragment(); + dialogFragment.setMessageID(directMessage.getId()); + DialogHelper.showDialog(activity, dialogFragment); })); return convertedView; } -- cgit v1.2.3