2012-09-05 101 views
2

我有一個列表視圖,當它被點擊時,它必須是不可見的。它工作得很好,但當屏幕上下滾動時,再次出現不可見的那些。有誰知道如何解決這些問題。隱藏點擊後的列表視圖

這裏是我的代碼片段爲ListItemClick

protected void onListItemClick(ListView l, View v, int position, long id) { 
      super.onListItemClick(l, v, position, id); 
      v.setVisibility(View.GONE); 

       Object o = this.getListAdapter().getItem(position); 

       Contact1 c = (Contact1) o;  

       Toast.makeText(this, c.getDisplayName(), 
       Toast.LENGTH_SHORT).show(); 


       Toast.makeText(this, c.getId(), Toast.LENGTH_SHORT).show(); 
       ids.add(c.getDisplayName()); 




      } 

回答

1

這是因爲每一個列表中滾動時,ListView的適配器的getView()方法被調用,其中listItems中再次產生。因此,對於你的需要,你需要有一個自定義適配器,並覆蓋其getView方法,並在它

@override 

public View getView(View view) //Just a mock method, do not copy paste 
{ 

    if(!isVisible[position]){ // isVisible is an array which holds whether a view at position is visible or not 
     //make it invicsible here 
    } 
    return view; 
} 
+0

太感謝你了你的建議的工作完全相同的方式,我想:-) –

+0

@MohanTimilsina好知道.. – ngesh

0

如果您使用自定義適配器並要隱藏滾動還,那麼你需要保持一個標誌作爲列表視圖然後點擊裏面getView()根據職位製作你的listview或listview項目,或者你可以隱藏所有項目。

1

該項目,我將假定它是一個Contact1對象,仍然在數組中(或任何用於容納項目的容器)。

您將需要兩件事情之一:

1)從數組中刪除的項目,然後重新生成列表視圖

2)保持無形的項目列表(如沙地建議),然後不爲他們創建一個視圖。

+0

我選擇了選項2,它真的很感謝:-) –

0

您可以使用該BaseAdpter並根據觀看位置使其可見和不可見

public class ContactsAdapter extends BaseAdapter { 

    ArrayList<ContactInfo> mlist; 
    Context mcontext; 
    // this arraylist used to contains click item 

    List<String> checkednamelist; 

public ContactsAdapter (Context context,ArrayList<ChatInfo> mchtlist) { 

     checkednamelist = new ArrayList<String>(); 
     mlist = mchtlist; 
     mcontext = context;  
    } 

@Override 
public int getCount() { 
    return mlist.size(); 
} 

@Override 
public Object getItem(int postion) { 
    return mlist.get(postion); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
    public View getView(int position, View convertview, ViewGroup viewgroup){ 
     View view = null; 
     if(convertview == null){ 
      LayoutInflater inflater = context.getLayoutInflater(); 
      view = inflater.inflate(R.layout.contactrow, null); 

      ContactHolder holder = new ContactHolder(); 

      holder.txtviewfirstname = (TextView)view.findViewById(R.id.firstname); 
      holder.txtviewphone = (TextView)view.findViewById(R.id.phone); 
      holder.chkselected = (CheckBox)view.findViewById(R.id.check); 




chkselected .setOnClickListener(new OnClickListener() { 
     @Override 
    public void onClick(View v) { 
    // here you can add selected item name for make it invisible from list 
    checkednamelist.add("Stringvalures"); 


}); 

    // this code is helps to achieve that 
try{ 
      if (checkednamelist.contains("yourstringname")) { 
          // here make visible your cotrol 
       chkleft.setChecked(true); 
       chkleft.setVisibility(View.VISIBLE); 
      } else { 

          // here make Invisible your cotrol 
       chkleft.setChecked(false); 
       chkleft.setVisibility(View.INVISIBLE); 
      } 
     }catch(Exception e){ 
      Log.i(TAG, "Exception while checkbox make unchecked when scrolling"+e); 
     } 

     view.setTag(holder); 

    } 
     else{ 
      view = convertview; 
     } 
     ContactHolder holder2 = (ContactHolder) view.getTag(); 
     holder2.txtviewfirstname.setText(list.get(position).firstname); 
     holder2.txtviewphone.setText(list.get(position).phonenumber); 
     holder2.chkselected.setChecked(list.get(position).selected); 
     return view; 
    } 

}