Listview改Treeview已經實作,但我想實作如下效果:

以下是監聽事件中的ItemClick事件,并不能分清是一個Item中哪一個控制元件得到了點擊:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ...代碼略 ....
}
另附treeview_item.xml原始碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_Main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:orientation="vertical">
<LinearLayout
android:id="@+id/llItem"
android:layout_width="match_parent"
android:layout_height="43dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/disclosureImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="false"
android:layout_centerVertical="false"
android:layout_gravity="center_vertical" />
<ImageView
android:id="@+id/deviceImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="false"
android:layout_centerVertical="false"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp" />
<TextView
android:id="@+id/contentText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="false"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:textColor="#000000"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
有哪位高手能解決這問題嗎?
uj5u.com熱心網友回復:
還是加上,方便供大家參考,基本按照如下方法處理點擊事件的:public class TreeViewItemClickListener implements OnItemClickListener {
/** adapter */
private TreeViewAdapter treeViewAdapter;
public TreeViewItemClickListener(TreeViewAdapter treeViewAdapter) {
this.treeViewAdapter = treeViewAdapter;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//點擊的item代表的元素
Element element = (Element) treeViewAdapter.getItem(position);
//樹中的元素
ArrayList<Element> elements = treeViewAdapter.getElements();
//元素的資料源
ArrayList<Element> elementsData = treeViewAdapter.getElementsData();
//點擊沒有子項的item直接回傳
if (!element.isHasChildren()) {
return;
}
if (element.isExpanded()) {
element.setExpanded(false);
//洗掉節點內部對應子節點資料,包括子節點的子節點...
ArrayList<Element> elementsToDel = new ArrayList<Element>();
for (int i = position + 1; i < elements.size(); i++) {
if (element.getLevel() >= elements.get(i).getLevel())
break;
elementsToDel.add(elements.get(i));
}
elements.removeAll(elementsToDel);
treeViewAdapter.notifyDataSetChanged();
} else {
element.setExpanded(true);
//從資料源中提取子節點資料添加進樹,注意這里只是添加了下一級子節點,為了簡化邏輯
int i = 1;//注意這里的計數器放在for外面才能保證計數有效
for (Element e : elementsData) {
if (e.getParendId() == element.getId()) {
e.setExpanded(false);
elements.add(position + i, e);
i ++;
}
}
treeViewAdapter.notifyDataSetChanged();
}
}
}
根本就沒辦法分清一個Item中的哪一個子控制元件得到了點擊
uj5u.com熱心網友回復:
或可在Adapter中處理Adapter中是能夠取到組件的,對組件加事件監聽。
在new adapter時把Listener 傳進去。
大概這樣
自定義一個介面 MyListener
activity中
listView.setadapter(new MyAdapter(data, listener));
....
adapter中
public MyAdapter(List data, MyListenerlistener){
mListener = listener;
}
private getView(int position){
view button = ....;
view text = ....;
button.setonxxx(){
mListener.onClick('btn', position);
}
text .setonxxx(){
mListener.onClick('txt', position);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/18852.html
標籤:Android
上一篇:android圖片問題請教
