Android 组件: SectionedAdapter


这个组件与Mark Murphy 的书《The Busy Coder’s Guide to Advanced Android Development》有一些不同,这个SectionedAdapter是通过干坏事,反编译Vending.apk得到的。还有一个是AggregatedAdapter,合起来实现market单个软件信息显示的效果。


 

不过AggregatedAdapter比较难反编译出来,没关系,加上cwac-merge这个组件,就可以实现同样的效果。不同分段的Adapter,继承SectionedAdapter,实现自己的东西,该干啥就干啥,然后merge起来。


SectionAdapter.java


/*  * Copyright (C) 2010 lytsing.org  *  * Licensed under the Apache License, Version 2.0 (the "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *  *      http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */  package org.lytsing.adapters;  import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;  /**  * abstract SectionAdapter, difference from  * cw-advandroid/ListView/Sections/src/com/commonsware/android/listview/SectionedAdapter.java  * just decompile from Vending.apk   *  */ abstract public class SectionAdapter extends BaseAdapter {     protected int mCount;     protected boolean mDeactivated;     protected View mSectionHeaderView;      /**      * Constructor      *      * @param sectionTitleId The resource ID for a layout file containing a layout to use when      *                  instantiating views.      * @param context The current context.      * @param parent The parent that this view will eventually be attached to      */     public SectionAdapter(int sectionTitleId, Context context, ViewGroup parent) {         this(Util.inflateView(R.layout.section_header, context, parent));         ((TextView)mSectionHeaderView).setText(sectionTitleId);     }      /**      * Constructor      *      * @param sectionHeaderView The header view      */     public SectionAdapter(View sectionHeaderView) {         mSectionHeaderView = sectionHeaderView;         mDeactivated = false;         mCount = 0;     }      public void activate() {         if (mDeactivated) {             mDeactivated = false;             notifyDataSetChanged();         }     }      /**      * Are all items in this SectionAdapter enable?      * If yes it means all items are selectable and clickable.      */     public boolean areAllItemsEnabled() {         return false;     }      public void deactivate() {         if (mDeactivated == false) {             mDeactivated = true;             notifyDataSetChanged();         }     }      /**      * How many items are in the data set represented by this      * Adapter.      */     public int getCount() {         if (mDeactivated) {             return 0;         } else {             return mCount + 1; // add one for header         }     }      /**      * Get the data item associated with the specified      * position in the data set.      *      * @param position Position of the item whose data we want      */     public Object getItem(int position) {         if (position == 0) {             return mSectionHeaderView;         }          return null;     }      /**      * Get the row id associated with the specified position      * in the list.      *      * @param position Position of the item whose data we want      */     public long getItemId(int position) {         if (position == 0) {             return mSectionHeaderView.getId();         }           return 0;     }      /**      * Get a View that displays the data at the specified      * position in the data set.      *      * @param position Position of the item whose data we want      * @param convertView View to recycle, if not null      * @param parent ViewGroup containing the returned View      */     public View getView(int position, View convertView, ViewGroup parent) {          return position == 0 ? mSectionHeaderView : null;     }      /**      * Returns true if the item at the specified position is not a separator      * (A separator is a non-selectable, non-clickable item).      *      * @param position Index of the item      * @return True if the item is not a separator      */     public boolean isEnabled(int position) {         return false;     } }Util.java


/*  * Copyright (C) 2010 lytsing.org  *  * Licensed under the Apache License, Version 2.0 (the "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *  *      http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */  package org.lytsing.adapters;  import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;  /**  * Util  *  */ public class Util {      private Util() {     }      /**      * Inflate a new view hierarchy from the specified XML resource.      *      * @param resource ID for an XML layout resource to load      * @param context The current context.      * @return The root View of the inflated XML file.      */     public static View inflateView(int resource, Context context) {          return inflateView(resource, context, null);     }      /**      * Inflate a new view hierarchy from the specified xml resource.      *      * @param resourceID for an XML layout resource to load (e.g.,      * @param context The current context.      * @param parent simply an object that provides a set of LayoutParams      *        values for root of the returned hierarchy      * @return The root View of the inflated XML file.      */     public static View inflateView(int resource, Context context, ViewGroup parent) {         LayoutInflater vi = (LayoutInflater)context                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);          return  vi.inflate(resource, parent, false);     } }res/layout/section_header.xml


 

你可能感兴趣的:(Android 组件: SectionedAdapter)