Инициализация действий обработки - PullRequest
0 голосов
/ 25 июня 2018

У меня есть действие, и внутри этого действия у меня есть код инициализации:

private fun init() {
        val authorFullName = photo?.user?.name ?: "?"
        val source = getString(R.string.unknown)

        photoAuthorText.text = String.format(getString(R.string.photo_by_s_on_s), authorFullName, source)

        Utils.makeUnderlineBold(photoAuthorText, arrayOf(authorFullName, source))
    }



 private fun loadPhoto() {
        Glide.with(this)
                .asBitmap()
                .load(photo?.urls?.regular)
                .into(object : SimpleTarget<Bitmap>() {
                    override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                        photoImageView.setImageBitmap(resource)
                    }
                })
    }

Тогда внутри onCreate я просто звоню:

init()
loadPhoto()

У меня вопрос: нужно ли переместить эту логику из этих двух методов инициализации во ViewModel? Я не думаю, что держать эту логику в Activity - хорошая идея.

Я знаю о связывании данных, но не хочу его использовать. Есть ли другие подходы?

1 Ответ

0 голосов
/ 25 июня 2018

Проверка в Java

Код активности Открытый класс UserProfileActivity extends Activity {UserProfileModel viewModel;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.user_activity_layout);
     viewModel = ViewModelProviders.of(this).get(UserProfileModel.class);
     bindData();        

 }

void bindData() {
    viewModel.userLiveData.observer(this, new Observer() {
        @Override
         public void onChanged(@Nullable UserFullDetails data) {
             // update ui.
             // You can set Profile Image And User Details UI Components
         }
     });
}

}

Этот код ViewModel

public class UserProfileModel extends ViewModel {
     private MediatorLiveData<UserFullDetails> userFullDetails;
     public UserModel() {

     }

     public LiveData<UserFullDetails> getUserFullDetails() {
        if (userFullDetails == null) {
            userFullDetails = new MediatorLiveData<>();
            getUpdatedUserData();
        }
        return userFullDetails;
    }

    void getUpdatedUserData() {
        LocalData<UserFullDetails> mResponse = getDataFromDataSource(); //Data come from local or cloud
        userFullDetails.setValue(mResponse.getData());
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...