2012-09-05 61 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; 
    } 

}