ListView中的item中的Onclick事件的優化

  1. ListView的Adapter的優化佈局載入器的載入次數最典型的使用方法是使用convertView進行優化,讓convertView當作佈局載入器的載體,也就是.重用 convertView
    用以免反覆建立 View。反覆建立 View 代價較大,而且假設重用 view 不改變寬高,重用View可以下降又一次分配緩存形成的內存頻繁分配/回收;
  2. convertView = LayoutInflater.from(context).inflate(R.layout.子佈局, null)
  3.     
        
        
        
    避免在 getView 中有 反覆調用的 findViewById findViewById 的實現是遍歷。假設你定義的 View 越複雜代價越大。 Google 推薦的作法是用 ViewHolder,而後保存在 view 的 tag 中。

    現在 RecyclerView 也是強制使用 ViewHolder 了。 java

    findViewById因爲Adapter中的getView方法運行好屢次,因此需要優化,,那麼典型的優化是是使用ViewHolder一說這個詞你應該知道是如何優化(不會的問百度)
  4. 就是優化item中的點擊事件,

  @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;

        if (convertView == null) {

            holder = new ViewHolder();

            convertView = LinearLayout.inflate(R.layout.vlist, null);
            holder.title = (TextView) convertView.findViewById(R.id.title);
            holder.info = (TextView) convertView.findViewById(R.id.info);
            holder.viewBtn = (Button) convertView.findViewById(R.id.view_btn);

            //使用convertView複用點擊事件
            holder.title.setOnClickListener(holder);
            holder.info.setOnClickListener(holder);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        //使用傳遞參數的形式給點擊事件設置內容.
        //需要的話,就用addLIst傳遞過去需要的參數.
        holder.addList(position,context);
        holder.title.setText((String) mData.get(position).get("title"));
        holder.info.setText((String) mData.get(position).get("info"));

        return convertView;
    }
}


//提取出來方便點
final class ViewHolder implements View.OnClickListener {
    public TextView title;
    public TextView info;
    public Button viewBtn;
    int mPosition;
    Context context;

    public void addList(int inPosition,Context context) {
        mPosition = inPosition;
        this.context = context;
    }

    @Override
    public void onClick(View v) {
        //寫入item中的點擊事件
        //...
        //v.getTag();
        switch (v.getId()){
            case R.id.title:
        Toast.makeText(context, "點擊了title----"+mPosition, Toast.LENGTH_SHORT).show();

                break;
            case R.id.info:

        Toast.makeText(context, "點擊了info====>>"+mPosition, Toast.LENGTH_SHORT).show();
                break;

        }
    }
}

5.這樣也就避免的在getView中進行耗時操做有空在更,,菜鳥歡迎指點,一塊兒探討listView的優化,,緩存

6.就是讓ListView在高速滑動的時候中止載入圖片,有空補充.
ide

相關文章
相關標籤/搜索