你应该在Android Activity中实现ViewHolder模式吗?

时间:2017-08-23 09:25:31

标签: android android-viewholder

到目前为止,我一直在ViewHolders使用RecyclerView

我想知道将它用于活动是否正确?

我现在所做的是在一个活动的OnCreate方法中,我总是称之为assign_views的方法,它看起来像这样:

//instance variables
TextView _text_view_1;
TextView _text_view_2;
//etc


void assing_views(boolean assign){
    _text_view_1 = assign ? (TextView)findViewById(R.id.text_view_1) : null;
    _text_view_2 = assign ? (TextView)findViewById(R.id.text_view_2) : null;
}

并在活动的OnDestroy方法中调用assign_views(false)

所以我将它改成这样的东西会有好处:

private ActivityViewHolder get_holder(){
    return (ActivityViewHolder)getRootView().getTag();
}


void assign_views(boolean assign) {
   if (assign && get_holder() == null) {
      getRootView().setTag(new ActivityViewHolder());
      get_holder().text_view_1 = (TextView)findViewById(R.id.text_view_1);
      get_holder().text_view_2 = (TextView)findViewById(R.id.text_view_2);
   } else if (!assign){
     getRootView().setTag(null);
   }
}


static class ActivityViewHolder {
   TextView text_view_1;
   TextView text_view_2;
}

然后将我的所有引用从_text_view_1替换为get_holder().text_view_1

提前感谢您提供的任何帮助

1 个答案:

答案 0 :(得分:0)

由于屏幕旋转或其他配置更改,在活动完成或将要重新创建时调用

onDestoy()。可能有些尺寸会发生变化,例如ActionBar的高度与横向和纵向不同,或者另一个版面文件将用于新的方向。
如果要存储视图而不重新创建,则可以手动处理屏幕旋转。这是不好的做法,当你真的应该使用它时,没有那么多的情况。只需按照以下步骤操作:

  1. 在您的清单中添加
    <activity android:name=".MyActivity" android:label="@string/title_my_activity" android:configChanges="orientation|screenSize|keyboardHidden" />
  2. 覆盖活动中的onConfigurationChanged()以处理更改。