我們生成了幾個ListView,它們爲用戶保存信息以過濾另一個片段中的信息。它工作正常,除非你暫停和恢復應用程序(例如,背景或鎖定屏幕)。一旦你這樣做,列表可以滾動,但不能點擊。ListView接收到觸摸,但onItemClickListener在暫停和恢復後沒有收到點擊
列表生成代碼:
private View addList(LayoutInflater inflater, ViewGroup container, final FilterValue.SearchCategory type, final String[] labels) {
ArrayAdapter<String> adapter = generateArrayAdapter(inflater, labels, type);
if(adapter == null) {
return null;
}
filterAdapters.add(adapter);
ListView list = (ListView) inflater.inflate(R.layout.on_demand_filter_list, container, false);
list.setAdapter(adapter);
list.setItemsCanFocus(false);
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
list.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
list.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View view, final MotionEvent motionEvent) {
LOG.d(TAG, "NO TOUCHING!");
return false; //To change body of implemented methods use File | Settings | File Templates.
}
});
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
LOG.d(TAG, "onItemClick!");
CheckedTextView textView = (CheckedTextView) view.findViewById(R.id.title);
textView.toggle();
if (textView.isChecked()) {
filterValue.addToSelectedList(labels[i], type);
} else {
filterValue.removeFromSelectedList(labels[i], type);
}
}
});
list.setAdapter(adapter);
list.setVisibility(View.GONE);
filterListContainer.addView(list);
return list;
}
的onTouch聽者的存在只是爲了確保觸摸被接收。 (它是。)DescendantFocusability似乎沒有效果,這個bug在添加之前和之後都存在。
每個都綁定到顯示或隱藏列表的按鈕。
titleHeader.setOnClickListener(new View.OnClickListener() {
public void onClick(View clickedView) {
closeNetworkList();
closeGenreList();
titlesOpen = !titlesOpen;
ImageView indicator = (ImageView) clickedView.findViewById(R.id.filter_expansion_indicator_icon);
if (indicator != null) {
if (titlesOpen) {
indicator.setImageResource(R.drawable.arrow_filter_up);
} else {
indicator.setImageResource(R.drawable.arrow_filter_down);
}
}
if (titlesOpen) {
titlesListView.setVisibility(View.VISIBLE);
} else {
titlesListView.setVisibility(View.GONE);
}
}
});
點擊此按鈕隱藏,然後顯示ListView控件(這與addList生成)重置的東西,並且項目可以再次點擊。
XML的項目行:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:focusableInTouchMode="false"
android:padding="8dp"
android:orientation="horizontal">
<CheckedTextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@drawable/on_demand_filter_checked_text_sel"
android:gravity="center_vertical"
android:paddingLeft="76dp"
android:focusable="false"
android:focusableInTouchMode="false"
android:drawableLeft="@drawable/checkbox_sel"
android:drawablePadding="14dp"
style="@style/LargeRegular"/>
</LinearLayout>
的focusables是新增加的,但既不工作。問題發生在他們被添加之前。
ListView控件本身:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="275dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:divider="@color/Transparent"
android:descendantFocusability="blocksDescendants"
android:cacheColorHint="#ffffff"/>
我在我絕對束手無策。我的團隊中沒有人對此有明智的解決方案。它工作正常,直到你暫停和恢復。我們絕不會在簡歷或暫停中觸及觀點。誰能幫忙?我可以根據需要提供更多細節。
而你試圖註釋掉你暫停/繼續回調,看他們是否不影響這份清單視圖? – 2012-03-01 22:06:36
是的。簡歷沒有回調,並且唯一一個暫停沒有效果。 – Calvin 2012-03-01 23:42:37
將我們的OnItemClickListener代碼移動到各個列表項中的getView()調用中生成的各個OnClickListeners中,這個問題就會消失。雖然這是一個可接受的解決方法,但它很有趣。 – Calvin 2012-03-03 21:57:32