Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 自定義控件之android列表分組及字母導航

自定義控件之android列表分組及字母導航

編輯:關於Android編程

有了以上兩篇文章的重構,現在把ListView分組列表重構為自定義控件就會非常簡單,只需要把初始化操作放在自定義控件的構造函數裡面。重構後的自定義控件以上一篇的注解重構為基礎。

基本結構

這裡首先貼上一張上篇文章重構後的activity的代碼結構,相關的方法實現在之前兩篇文章中都有貼出。

\

再貼一張重構後的View的結構。可見兩者的結構都及其相似。不同的是上邊的activity中有抽象方法getDataList(),而下邊的沒有,但是多了一個ILoadRulerData iLoadData 類型的接口。用於加載數據。

\

且自定義View中把activity 中initdata()方法改為loaddata(),以供主動調用後開始加載數據。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cD7W2Lm5uvO7+bG+tPrC68jnz8KjrMqhwtTBy9K7sr+31rrN1q7HsNbYuLS1xLT6wuujujwvcD4KPHA+ytfPyMrHyv2+3bzT1Ni907/ao7o8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">public interface ILoadRulerData { public List getDataList(); }

然後是自定義view的基本代碼:

/**  
 * @Description: 需要先調用 setiLoadData,設置獲取數據的接口,然後再調用  loadData方法
 */
public class RulerView extends LinearLayout{
 
    private View baseView;
    private TextView noDataView;
   
    private TextView RulerTag;
    private ProgressBarWithText progress;
   
    private ListView listView;
   
    private RulerWidget ruler;
 
    private ILoadRulerData iLoadData;
    private List originalList;
    public  List> dealedList;
    private HashMap tagLocation = new HashMap();
    private RulerAdapter rulerAdapter;
 
    public RulerView(Context context) {
       super(context);
       init( context);
    }
   
    public RulerView(Context context, AttributeSet attrs) {
       super(context, attrs);
       init( context);
    }
   
    public RulerView(Context context, AttributeSet attrs, int defStyle) {
       super(context, attrs);
       init( context);
    }
 
   
    /**  
    * @Description: 設置數據加載接口
    * @param  
    * @return void
    */
    public void setiLoadData(ILoadRulerData iLoadData) {
       this.iLoadData = iLoadData;
    }
 
    private void init(Context context){
       baseView = LayoutInflater.from(context).inflate(R.layout.g_ruler, null);
       noDataView = (TextView) baseView.findViewById(R.id.g_base_list_nodata);
       RulerTag = (TextView) baseView.findViewById(R.id.g_ruler_tag);
       progress = (ProgressBarWithText) baseView.findViewById(R.id.g_base_progressbar_withtext);
       listView = (ListView) baseView.findViewById(R.id.g_base_list);
       ruler = (RulerWidget) baseView.findViewById(R.id.g_ruler);
       progress.setVisibility(View.VISIBLE);
       RulerTag.setVisibility(View.GONE);
       noDataView.setVisibility(View.GONE);
       listView.setVisibility(View.GONE);
       ruler.setVisibility(View.GONE);
       addView(baseView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    }
   
 
    public void loadData(){
       new GetDataAsyTask().execute();
    }
   
    。。。。。
        }

測試

布局



    
   
   <******.ruler.view.RulerView
       android:id="@+id/test_ruler_view_id"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />

Activity

public class TestViewActivity extends Activity{
 
   
   
    private RulerView rulerView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.test_ruler_view);
        rulerView = (RulerView) findViewById(R.id.test_ruler_view_id);
        rulerView.setiLoadData(new ILoadRulerData() {
          
           @Override
           public List getDataList() {
             
              return new TestAnnnoDao().getBoList();
           }
       });
        rulerView.loadData();
      
    }
}

此系列完畢。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved