巧みな秒構造が強力なadapterを生み出す


前の文章ではadapterに対する簡単な認識を紹介し、この間の学習を通じてadapterの強さを深く認識した.この記事では、さまざまなadapterのニーズを満たすために、独自のコンストラクション関数を巧みに定義する方法を紹介します.また、以前のListViewとAdapterの逗比例を組み合わせたさらなる改善も行い、アダプタの理解に役立つことを期待しています.
前の例で取得したエンティティオブジェクトを個々のエンティティ属性の配列に変換してアダプタに入れると、なんだか不器用な感じがしますが、どのパッケージもこのようなものにはならないという限界がありました.そこでネット上で各種の資料を探して、ついに自分の心の中の疑問を解決して、今改版した後のコードを持ってみんなと分かち合います!
改版前:
<span style="font-size: 18px;"> </span><span style="font-size:14px;">/*   -    */  
     private  Handler handler = new Handler() {  
         /*         */  
         public List<sonSortigns> sortingSon;  


        private String[] ListproName = {};  


          //  Handler     ,  handleMessage()    
          @Override  
          public void handleMessage(Message msg) {  

              switch (msg.what) {  
                case -1:  
                    Toast.makeText(SearchActivity.this, "       !",  
                            Toast.LENGTH_SHORT).show();  
                    break;  
                case -2:  
                    Toast.makeText(SearchActivity.this, "  ,   ...",  
                            Toast.LENGTH_SHORT).show();  
                    break;                
                case 1:               
                    String temp = (String)msg.obj;                                
                    //    json       
                    List<productSonSorting_cate> sortingInfo = JSON.parseArray(temp,productSonSorting_cate.class);  

                    //         
                    LengthsortingSon=sortingInfo.get(0).getSonSortings().get(0).getProducts().size();  

                    /*            */  
                    for(int i=0;i<LengthsortingSon;i++){  

                        mTitleValues[i] =sortingInfo.get(0).getSonSortings().get(0).getProducts().get(i).getProName().toString();  
                        mContentValues[i] =sortingInfo.get(0).getSonSortings().get(0).getProducts().get(i).getMarkPrice().toString();  
                        mEvluateValues[i]=sortingInfo.get(0).getSonSortings().get(0).getProducts().get(i).getHaoping().toString();  
                        mSellValues[i]=sortingInfo.get(0).getSonSortings().get(0).getProducts().get(i).getAreadSell().toString();  
                    }  

                    /*         */  
                    product_class_listview.setAdapter(new productsAdapter());                    
                    break;  
                default:  
                    break;  
              }  
          }     
     }; </span>

改版後:
<span style="font-size:14px;">/*   -    */
     private  Handler handler = new Handler() {
         /*         */
         public List<sonSortigns> sortingSon;


        private String[] ListproName = {};


          //  Handler     ,  handleMessage()  
          @Override
          public void handleMessage(Message msg) {

              switch (msg.what) {
                case -1:
                    Toast.makeText(SearchActivity.this, "       !",
                            Toast.LENGTH_SHORT).show();
                    break;
                case -2:
                    Toast.makeText(SearchActivity.this, "  ,   ...",
                            Toast.LENGTH_SHORT).show();
                    break;              
                case 1:             
                    String temp = (String)msg.obj;                              
                    //    json     
                    List<productSonSorting_cate> sortingInfo = JSON.parseArray(temp,productSonSorting_cate.class);
                    // listview     
                    product_class_listview.setAdapter(new ProductsListAdapter(SearchActivity.this,sortingInfo));
                    break;

                default:
                    break;
              }
          }   
     };</span>

ここで使用するProductListAdapter()の具体的な内容は次のとおりです.
<span style="font-size:14px;">package jczb.shoping.adapter;

import java.util.List;

import jczb.shoping.adapter.MainLVGrideViewAdapter.mainProList;
import jczb.shoping.model.productSonSorting_cate;
import jczb.shoping.model.products;
import jczb.shoping.model.sonSortigns;
import jczb.shoping.ui.ProductsInfoActivity;
import jczb.shoping.ui.R;
import jczb.shoping.ui.SearchActivity;
import jczb.shoping.ui.SearchActivity.ViewHolder;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;


/*   -    &  */
public class ProductsListAdapter extends BaseAdapter{

    private Context mContext; 
    private List<productSonSorting_cate> mList;

    public ProductsListAdapter(Context mContext,List<productSonSorting_cate> mList) { 
        super(); 
        this.mContext = mContext; 
        this.mList = mList; 
        }


    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        if (mList==null) {
            return 0;
        }else {
            //      、         item   
            return this.mList.get(0).getSonSortings().get(0).getProducts().size();
        }
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        if (mList == null) { 
            return null; 
        } else { 
            //    
            return this.mList.get(position); 
        } 
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder = null; 
        if (convertView == null) { 
            holder = new ViewHolder(); 
            convertView = LayoutInflater.from(this.mContext).inflate(R.layout.activity_search_item, null,true);
            //     
            holder.image=(ImageView) convertView.findViewById(R.id.search_image);
            holder.title=(TextView) convertView.findViewById(R.id.search_item_title);
            holder.content=(TextView) convertView.findViewById(R.id.search_item_value);
            holder.evaluate=(TextView) convertView.findViewById(R.id.search_item_evaluate);
            holder.sell=(TextView) convertView.findViewById(R.id.search_item_sell);         
            holder.search_layout=(LinearLayout) convertView.findViewById(R.id.search_layout);


            //    ,     
            convertView.setTag(holder); 

        } else { 
            holder = (ViewHolder) convertView.getTag(); 
        } 

        if (this.mList != null) { 
            //      
            sonSortigns mProductsList = this.mList.get(0).getSonSortings().get(position); 
            holder.title.setText(mProductsList.getProducts().get(position).getProName());
            holder.content.setText(mProductsList.getProducts().get(position).getShopPrice());
            holder.evaluate.setText(mProductsList.getProducts().get(position).getHaoping());
            holder.sell.setText(mProductsList.getProducts().get(position).getAreadSell());          

        } 
        return convertView; 
}

    /*  item  */
    public class ViewHolder {
        LinearLayout search_layout;
        ImageView image;
        TextView title;
        TextView content;
        TextView evaluate;
        TextView sell;
    }   
}</span>

その後の使い方がより便利で柔軟で、多くの制限が解消されていることがわかります.私たちは自分の必要に応じて、自分で定義したアダプタにデータ型を置くだけでいいです.もちろん、このアダプタは自分の必要に応じて定義されています.ここで自分で要求して得たのはエンティティモデルなので、定義時のアダプタはエンティティ配列のタイプです.その後、配列の各属性値を必要に応じてコントロールにバインドします.
<span style="font-size:14px;">if (this.mList != null) { 
            //      
            sonSortigns mProductsList = this.mList.get(0).getSonSortings().get(position); 
            holder.title.setText(mProductsList.getProducts().get(position).getProName());
            holder.content.setText(mProductsList.getProducts().get(position).getShopPrice());
            holder.evaluate.setText(mProductsList.getProducts().get(position).getHaoping());
            holder.sell.setText(mProductsList.getProducts().get(position).getAreadSell());      
        }   </span>

その他は統一フォーマットで書けばいいのですが、唯一必要なのは、手に入れたデータ型を自分の必要なデータに解析してviewholerで対応するコントロールに値を付けることです.アダプターについて研究してから一週間ぐらい経ちました.その間、多くの問題を経験しました.小さな問題に何度もつまずいたことがあります.今、アダプターの強さを実感しました.牛たちが人に奉仕する崇高な境地も体得しました.