jamendo之主界面分析(1)【列表部分】

来源:互联网 发布:网络上cp是什么意思 编辑:程序博客网 时间:2024/04/30 05:30

主要的对象有:

PurpleEntry(这个类是定义每行列表的属性),

//首页上列表的图片资源
 private Integer mDrawable;
 //显示的标题
 private String mText;
 //显示标题的资源ID
 private Integer mTextId;
 //监听器

private PurpleListener mListener;

ArrayListAdapter(继承自BaseAdapter)里面定义了一个ArrayList类型的list来存放数据,

PurpleAdapter(这个类是继承自ArrayListAdapter)用来匹配视图,

SeparatedListAdapter(这个类是用来存放各个purpleAdapter,并绑定界面的adapter,继承自BaseAdapter),

下面分析详细过程:

代码中先new出了两个ArrayListAdapter对象来存放不同分组的PurpleEntry(其实就是列表的两个组,BrowseJamendo和MyLibrary),

mBrowseJamendoPurpleAdapter = new PurpleAdapter(this);
mMyLibraryPurpleAdapter = new PurpleAdapter(this);

 

然后他用两个ArrayList对象来放入各个Purple对象,(每一个ArrayList对象对应一个PurpleAdapter对象)

ArrayList<PurpleEntry> browseListEntry = new ArrayList<PurpleEntry>();
  ArrayList<PurpleEntry> libraryListEntry = new ArrayList<PurpleEntry>();

browseListEntry.add(new PurpleEntry(R.drawable.list_search, R.string.search, new PurpleListener(){

   @Override
   public void performAction() {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "启动Search模块", Toast.LENGTH_LONG).show();

    //SearchActivity.launch(MainActivity.this);
   }

  }));

  browseListEntry.add(new PurpleEntry(R.drawable.list_radio,R.string.radio,new PurpleListener(){

   @Override
   public void performAction() {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "启动Radio模块", Toast.LENGTH_LONG).show();
   }

  }));

  browseListEntry.add(new PurpleEntry(R.drawable.list_top,R.string.most_listened,new PurpleListener(){

   @Override
   public void performAction() {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "启动Most-Listened模块", Toast.LENGTH_LONG).show();

   }

  }));

  libraryListEntry.add(new PurpleEntry(R.drawable.list_playlist, R.string.playlists, new PurpleListener(){

   @Override
   public void performAction() {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "启动PlayList模块", Toast.LENGTH_LONG).show();
   }

  }));

  if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
   libraryListEntry.add(new PurpleEntry(R.drawable.list_download,R.string.download, new PurpleListener(){

    @Override
    public void performAction() {
     // TODO Auto-generated method stub
     Toast.makeText(MainActivity.this, "启动downLoad模块", Toast.LENGTH_LONG).show();

    }

   }));
  }

adapter和Arraylist对象一一对应

mBrowseJamendoPurpleAdapter.setMlist(browseListEntry);
mMyLibraryPurpleAdapter.setMlist(libraryListEntry);

 

把各个PurpleAdapter存放至SeparatedListAdapter对象中:

SeparatedListAdapter separatedAdapter = new SeparatedListAdapter(this);
separatedAdapter.addSection(getString(R.string.browse_jamendo), mBrowseJamendoPurpleAdapter);
separatedAdapter.addSection(getString(R.string.my_library), mMyLibraryPurpleAdapter);

 

那么这里PurpleAdapter具体是怎么操作的呢?

在PurpleAdapter里面有两个变量:

private Map<String,Adapter> sections = new LinkedHashMap<String,Adapter>();
public final ArrayAdapter<String> headers;

headers:用来存放分组的标题(也就是BrowseJamendo和MyLibrary),

sections:用来存放各个组对应下的adapter对象。

在getview的时候当position等于0的时候就得到标题的视图,然后就得到改标题下的每一行视图。

(当第一的标题BrowseJamendo,position=0,执行的是标题视图,size在第一的标题的时候始终是4,当position=4的时候,

就会执行 position -= size;sectionnum++;把position变成0,sectionnum加1,然后进行下一个标题。

for(Object section : this.sections.keySet()) {
   Adapter adapter = sections.get(section);
   int size = adapter.getCount() + 1;

   // check if position inside this section
   if(position == 0) return headers.getView(sectionnum, convertView, parent);
   if(position < size) return adapter.getView(position - 1, convertView, parent);

   // otherwise jump into next section
   position -= size;
   sectionnum++;
  }

 

绑定dapter和监听器

mHomeListView.setAdapter(separatedAdapter);
mHomeListView.setOnItemClickListener(mHomeItemClickListener);

 

监听器:

private OnItemClickListener mHomeItemClickListener = new OnItemClickListener(){

  @Override
  public void onItemClick(AdapterView<?> adapterView, View view, int index,
    long time) {

//相应个歌监听器事件
 PurpleListener listener = ((PurpleEntry)adapterView.getAdapter().getItem(index)).getmListener();
   if(listener != null){
    listener.performAction();
   }
  }

 };

 

至此列表部分分析完成。