我正在使用帶有查看模式的BaseAdapter
。如何隱藏列表項?
而且我想隱藏從Listview
設置一定的項目:
convertView.setVisibility(View.GONE);
什麼都不做。
我正在使用帶有查看模式的BaseAdapter
。如何隱藏列表項?
而且我想隱藏從Listview
設置一定的項目:
convertView.setVisibility(View.GONE);
什麼都不做。
從適配器列表中刪除它的項目並重新加載adaper,如果需要再次顯示該項目,則考慮使用另一個列表。
這Answer做你需要操縱名單,它排序,你能適應它刪除項目
編輯
要實現撤消,則可能需要保存原始值列表,棧舉行刪除的項目指標和另一個列表,從原來的列表removed_indices生成,這將在適配器中使用
這也是我的想法,刪除項目,然後添加它們。 但它看起來很醜,因爲我想要項目在列表(位置)的特定位置。 – user1940676
該解決方案重新加載列表,這是它的唯一效果,但你似乎不太舒服 –
以及我將刪除項目,呼籲notifydatasethanged,並在需要時再次添加它們。 – user1940676
試試這個:
listitem.setVisibility(View.INVISIBLE);
或
listitem.setVisibility(View.GONE);
你知道'View.INVISIBLE'和'View.GONE'之間的區別嗎? – Selvin
他也可以寫View.GONE我知道。但我的意思是他應該把這個列表項目設置爲不可見,而不是視圖。 –
當視圖不可見時,視圖中將出現'佔位符'。 – user1940676
下面的例子:
ListActivity.this.setListAdapter(new SimpleAdapter(MainActivity.this, contactsList,
R.layout.list_item,
new String[] { TAG_CONTACT_NAME, TAG_STATUS}, new int[] {
R.id.name, R.id.status}){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
TextView statTview = (TextView)v.findViewById(R.id.status);
String stat = statTview .getText().toString();
if (stat.equals("0")){
v.findViewById(R.id.status).setVisibility(View.GONE);
}
return v;
}
}
);
好像他已經這樣做了(我們可以假設這個問題......你讀過了嗎?)...所以這不是一個答案 – Selvin
可以存儲在另一個ArrayList中的隱藏位置和隱藏像這樣的項目:
public class SampleAdapter extends BaseAdapter {
Activity activity;
ArrayList<String> listItems;
ArrayList<Integer> hiddenPositions = new ArrayList<>();
public SampleAdapter(Activity activity, ArrayList<String> listItems) {
this.activity = activtity;
this.listItems = listItems;
}
...
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
// The following small snippet of code ensures
// that we skip data from all the hidden positions
// and use the updated position to fetch the
// correct data from the listItems ArrayList.
for(Integer hiddenIndex : hiddenPositions) {
if(hiddenIndex <= position) {
position = position + 1;
}
}
String testString = listItems.get(position);
...
}
@Override
public int getCount() {
return listItems.size() - hiddenPositions.size();
}
}
爲了能夠將其重新顯示在列表中,只需從hiddenPositions
ArrayList中刪除位置並執行notifyDataSetChanged();
你能不能從您的適配器後整個'getView()'方法? –
@AndrewSchuster是一個直接執行的http://developer.android.com/training/improving-layouts/smooth-scrolling.html ,它的工作 – user1940676
'View listItem = convertView; View v; while(!(v = (View)listItem.getParent())。equals(parent)){listItem = v; } listItem.setVisibility(View.GONE);'放我不確定convertView是否具有getView中的父級;/...它會發生,因爲您在getView中創建的項目不能直接添加到ListView- ViewGroup ... ListView實現可以在添加到自己之前在其他視圖中打包您的視圖 – Selvin