<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # notifyDataSetChanged 不生效原因 1、在子線程調用 2、數據源引用對象發生變更 # ListView中的Adapter ListView中的Adapter示例如下: ```java public class StudentAdaper extends ArrayAdapter<Student> { public StudentAdaper(Context context, int resourceId, List<Student> studentList) { super(context, resourceId, studentList); } @Override public View getView(int position, View convertView, ViewGroup parent) {} @Override public int getItemViewType(int position) {} @Override public int getViewTypeCount() {} static class ViewHolder {} } ``` 其中getView()方法會在item顯示在屏幕上時進行調用。比如共100個item要顯示,但屏幕高度只可以展示10個item,一開始getView()方法會調用10次,滑動界面時,每當有item展示時,再調用相應的getView()方法。 ## ListView的優化 ### Adapter優化 Layout的inflate()方法和findViewById()方法都是消耗資源的工作,在ListView快速滑動時,會消耗大量資源。所以引入ConvertView和ViewHolder來對布局和View進行緩存。 ```java @Override public View getView(int position, View convertView, ViewGroup parent) { Student student = getItem(position); View view; ViewHolder viewHolder; if (convertView == null) { view = LayoutInflater.from(mContext).inflate(mResourceId, parent, false); viewHolder = new ViewHolder(); viewHolder.name = view.findViewById(R.id.tv_name); viewholder.mark = view.findViewById(R.id.tv_mark); view.setTag(viewHolder); } else { view = convertView; viewHolder = (ViewHolder)view.getTag(); } viewHolder.name.setText(student.getName()); viewHolder.mark.setText(student.getMark()); return view; } ``` # RecyclerView中的Adapter RecyclerView中的Adapter示例如下: ```java public class StudentAdaper extends RecyclerView.Adapter<StudentAdapter.ViewHolder> { public StudentAdapter() {} @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {} @Override public void onBindViewHolder(ViewHolder holder, int position) {} @Override public int getItemCount() {} @Override public int getItemViewType() {} static class ViewHolder {} } ``` 其中,屏幕高度只可以展示10個item時,會調用10次onCreateViewHolder,來創建ViewHolder,上下滑動時ViewHolder可以緩存。當item出現(或將要出現在屏幕)時會調用onBindViewHolder,對ViewHolder進行填充。 ## RecyclerView的解耦性 * RecyclerView負責View的回收與復用 * LayoutManager負責View的布局管理 * ItemAnimator負責添加刪減動畫展示 * ItemDecoration負責分割線顯示
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看