2010年10月26日火曜日

Android ListView で区切り行をつくる

Q. ListView の 区切り行 * はどうやってつくるんですか?

A. isEnabled を Override して、 getView で 区切り行のときと、そうでないときで返す View を変えます

* 区切り行とは、Android Market アプリの 緑の区切りのようなやつのことです。ListView の1行ですが、タップしても反応しません。






  1. public class ExtendsArrayAdapterSample2 extends ListActivity {  
  2.   
  3.     public void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.   
  6.         List<bindData> data = new ArrayList<bindData>();  
  7.         data.add(new bindData("Clock", R.drawable.alermclock));  
  8.         data.add(new bindData("-"0));  
  9.         data.add(new bindData("Camera", R.drawable.camera));  
  10.         data.add(new bindData("-"0));  
  11.         data.add(new bindData("Book", R.drawable.bookopen));  
  12.         data.add(new bindData("-"0));  
  13.         data.add(new bindData("Calculator", R.drawable.calculator));  
  14.         data.add(new bindData("-"0));  
  15.   
  16.         MyAdapter adapter = new MyAdapter(this, R.layout.list_item5, data);  
  17.         setListAdapter(adapter);  
  18.     }  
  19.   
  20.     class bindData {  
  21.         String text;  
  22.         int imageResourceId;  
  23.   
  24.         public bindData(String text, int imageResourceId) {  
  25.             this.text = text;  
  26.             this.imageResourceId = imageResourceId;  
  27.         }  
  28.     }  
  29.   
  30.     static class ViewHolder {  
  31.         TextView textView;  
  32.         ImageView imageView;  
  33.     }  
  34.   
  35.     public class MyAdapter extends ArrayAdapter<bindData> {  
  36.         private LayoutInflater inflater;  
  37.         private int layoutId;  
  38.   
  39.         public MyAdapter(Context context, int layoutId, List<bindData> objects) {  
  40.             super(context, 0, objects);  
  41.             this.inflater = (LayoutInflater) context  
  42.                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  43.             this.layoutId = layoutId;  
  44.         }  
  45.   
  46.         @Override  
  47.         public View getView(int position, View convertView, ViewGroup parent) {  
  48.             ViewHolder holder;  
  49.   
  50.             if (convertView == null) {  
  51.                 convertView = inflater.inflate(layoutId, parent, false);  
  52.                 holder = new ViewHolder();  
  53.                 holder.textView = (TextView) convertView  
  54.                                         .findViewById(R.id.textview);  
  55.                 holder.imageView = (ImageView) convertView  
  56.                                         .findViewById(R.id.imageview);  
  57.                 convertView.setTag(holder);  
  58.             } else {  
  59.                 holder = (ViewHolder) convertView.getTag();  
  60.             }  
  61.      
  62.             if(!isEnabled(position))  
  63.                 convertView.setBackgroundColor(Color.BLACK);  
  64.             else {  
  65.                 bindData data = getItem(position);  
  66.                 holder.textView.setText(data.text);  
  67.                 holder.imageView.setImageResource(data.imageResourceId);      
  68.             }  
  69.   
  70.             return convertView;  
  71.         }  
  72.     
  73.         @Override  
  74.         public boolean isEnabled(int position) {  
  75.             return !(getItem(position).text.startsWith("-"));  
  76.         }  
  77.     }  
  78. }  





 

0 件のコメント:

コメントを投稿