对新浪微博android客户端中ListView的兑现

对新浪微博android客户端中ListView的实现
   新浪围脖android客户端中显示围脖信息条目的ListView有这几样功能:
1、点击ListView中没有展开的条目时,会展开该条目,显示更多的详细信息,并关闭其他展开的条目。
2、点击ListView中展开的条目时,会弹出对话框,提供更多的功能选项。
   因为毕设要实现类似的功能,所以就揣摩了一下,下面给出简单的示例:
   假设先显示图书标题列表,点击标题后会显示图书的作者和出版社。
 
  <LinearLayout 
	      android:id="@+id/LinearLayout01" 
	      android:layout_width="fill_parent" 
	      android:layout_height="fill_parent" 
	      xmlns:android="http://schemas.android.com/apk/res/android"
	      android:orientation="vertical"
	>
	<TextView android:id="@+id/list_item_1"
		  android:layout_width="fill_parent"
		  android:layout_height="wrap_content"
		  android:textSize="30dip"

	/>
	<TextView android:id="@+id/list_item_2"
		  android:layout_width="fill_parent"
		  android:layout_height="wrap_content"
		  android:visibility="gone"
	/>	
	
	<TextView android:id="@+id/list_item_3"
		  android:layout_width="fill_parent"
		  android:layout_height="wrap_content"
		  android:visibility="gone"	
	/>	
  </LinearLayout>
  

以上layout用来为SimpleAdapter提供布局文件,三个TextView分别对应图书的标题,作者和出版社。因为作者和出版社刚开始时隐藏的,所以将它们的visibility属性设置成gone值,这里需要说明下,visibility有三个属性值,visible,invisible和gone.visible指该组件可视,invisible和gone指该组件不可视,两者的区别在于,invisible让该组件的内容不可视,但是组件的大小依然会将空间占用,而gone是彻底从布局空间上隐藏。
下面是具体的实现类:
public class BookListActivity extends Activity {
   private ListView mBooksListView;
   private List<HashMap<String,String>> mItems;
   private SimpleAdapter mAdapter;
   private Book mBook;
	
   /*
    * 保存ListView中最近一次被点击的Item的信息
    */
     //ListView的第一个Item的position值为0,故必须初始化mLastPosition,使其永不冲突
     private int mLastPosition = -1;
     private View mLastView;

	
     @Override
     protected void onCreate(Bundle savedInstanceState) {
	  super.onCreate(savedInstanceState);
	  setContentView(R.layout.list_1);
	  //获取ListView
          mBooksListView = (ListView)findViewById(R.id.list1);
	  mItems = new ArrayList<HashMap<String,String>>();
	  List<Book>  mBooks = .....//获取想要显示的beans
	  for(Book b : mBooks) {
		HashMap<String,String> item = new HashMap<String,String>();
		    item.put(Constant.ATTR_BOOK_TITLE,b.getTitle());
		    item.put(Constant.ATTR_BOOK_AUTHOR, b.getAuthor());
		    item.put(Constant.ATTR_BOOK_PUBLISHER, b.getPublisher());
		    mItems.add(item);
		}
	  mAdapter = new SimpleAdapter(this,mItems,R.layout.list_items_1,
                     new String[]{Constant.ATTR_BOOK_TITLE,
                                 Constant.ATTR_BOOK_AUTHOR,
                              Constant.ATTR_BOOK_PUBLISHER},
                     new int[]{R.id.list_item_1,
                               R.id.list_item_2,
                               R.id.list_item_3});                     
	  mBooksListView.setAdapter(mAdapter);
	  mBooksListView.setOnItemClickListener(new OnItemClickListener(){
	  @Override
	  public void onItemClick(AdapterView<?> parent, View view, int position,
					long id) {
		if(position != mLastPosition) {
             //如果点击的条目和上一次的不同,那么就展开本条目,关闭上次展开的条目
		    setVisible(view);
		    setGone(mLastView);
		    mLastPosition = position;
		    mLastView = view;
		} else {
              //如果点击的条目和上一次的相同,那么就弹出对话框,提供更多功能选项
		    showDialog(......);
		}
	    }
			
	   });
	}
	
	/*
	 * 让view可视
	 */
	private void setVisible(View view) {
	   if(view == null)return;
	   LinearLayout layout = (LinearLayout)view;
           layout.findViewById(R.id.list_item_2).setVisibility(View.VISIBLE);
           layout.findViewById(R.id.list_item_3).setVisibility(View.VISIBLE);
	}
	
	/*
	 * 让view不可视
	 */
	private void setGone(View view) {
	   if(view == null)return;
	   LinearLayout layout = (LinearLayout)view;
	   layout.findViewById(R.id.list_item_2).setVisibility(View.GONE);
	   layout.findViewById(R.id.list_item_3).setVisibility(View.GONE);
	} 
}


1 楼 sxs 2010-06-04  
对新浪微博android客户端中ListView的兑现 ,新浪没开放接口,哥是很难做出来的,就算做出来,新浪也会不高兴的 - -
2 楼 爱琴海的水手 2010-06-07  
sxs 写道
对新浪微博android客户端中ListView的兑现 ,新浪没开放接口,哥是很难做出来的,就算做出来,新浪也会不高兴的 - -


我就是写毕设用用的哈对新浪微博android客户端中ListView的兑现