对新浪微博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);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值