2013-11-14 26 views
0

如何將listview的第一行設置爲invisible如何將第一行的listview設置爲不可見?

適配器的getView

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     if(position == 0) 
      convertView.setVisibility(View.INVISIBLE); 
     else 
      convertView.setVisibility(View.VISIBLE); 
     return convertView; 
    } 

隱藏第一行中的所有內容,但留下的空白。 有什麼建議嗎?

+0

本應在適配器來完成,而不是在ListView控件。更改適配器以省略無效的行 – XeNoN

回答

1

而不是使它invisiblegone過濾項目,並在列表視圖中顯示它。

實施自定義過濾器。

編輯:

請使用下面鏈接中的代碼。它的工作原理

http://www.sherif.mobi/2012/01/listview-with-ability-to-hide-rows.html

例:要隱藏行3

MainActivity.java

public class MainActivity extends Activity { 

    ListView lv; 
    String items[]={"A","B","C","D","E"}; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     lv = (ListView) findViewById(R.id.listView1); 
     CustomAdapter cus = new CustomAdapter(this,items); 
     cus.hide(2);// hide letter c 
     lv.setAdapter(cus); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 

    </ListView> 

</RelativeLayout> 

CustomAdapter.java

class CustomAdapter extends BaseAdapter 
{ 
    LayoutInflater inflater; 
    String items[]; 
    boolean[] hidden = null; 
    public CustomAdapter(MainActivity mainActivity, String[] items) { 
     // TODO Auto-generated constructor stub 
     inflater = LayoutInflater.from(mainActivity); 
     this.items=items; 
     hidden = new boolean[items.length]; 
     for (int i = 0; i < items.length; i++) 
       hidden[i] = false; 
    } 
    private int getRealPosition(int position) { 
     int hElements = getHiddenCountUpTo(position); 
     int diff = 0; 
     for(int i=0;i<hElements;i++) { 
      diff++; 
      if(hidden[position+diff]) 
      i--; 
     } 
     return (position + diff); 
     } 
     private int getHiddenCountUpTo(int location) { 
     int count = 0; 
     for(int i=0;i<=location;i++) { 
      if(hidden[i]) 
      count++; 
     } 
     return count; 
     } 

    public void hide(int position) { 
     hidden[getRealPosition(position)] = true; 
     notifyDataSetChanged(); 
     notifyDataSetInvalidated(); 
     } 
     public void unHide(int position) { 
     hidden[getRealPosition(position)] = false; 
     notifyDataSetChanged(); 
     notifyDataSetInvalidated(); 
     } 
    @Override 
    public int getCount() { 
    return (items.length - getHiddenCount()); 
    } 

    private int getHiddenCount() { 
    int count = 0; 
    for(int i=0;i<items.length;i++) 
     if(hidden[i]) 
     count++; 
    return count; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder holder; 

     int pos = getRealPosition(position); 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.row, parent, false); 
      holder = new ViewHolder(); 
      holder.tv = (TextView) convertView.findViewById(R.id.textView1); 
      holder.tv2 = (TextView) convertView.findViewById(R.id.textView2); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.tv.setText("Postion at"+pos); 
     holder.tv2.setText("Item is "+items[pos]); 
     return convertView; 
    } 
static class ViewHolder 
{ 
    TextView tv,tv2; 
} 
} 

row.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="18dp" 
     android:layout_marginTop="24dp" 
     android:text="TextView" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/textView1" 
     android:layout_alignBottom="@+id/textView1" 
     android:layout_centerHorizontal="true" 
     android:text="TextView" /> 

</RelativeLayout> 

快照

enter image description here

+0

的數據。我曾試過。 – gIrL

+0

@ user2978175不起作用。你是什​​麼意思?你顯示的內容你甚至沒有虛化佈局 – Raghunandan

+0

@ user2978175你需要設置該視圖的高度爲1或2。我不認爲你可以設置與列表行... –

1
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    if(position == 0) 
     convertView.setVisibility(View.GONE); 
    else 
     convertView.setVisibility(View.VISIBLE); 
    return convertView; 
} 
相關問題