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()); 




            }
4

4 に答える 4

1

これは、リストがスクロールされるたびに、リストビューのアダプタのgetView()メソッドが呼び出され、リストアイテムが再度生成されるために発生します。したがって、必要に応じて、カスタムアダプターを用意し、その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;
}
于 2012-09-05T04:13:34.720 に答える
1

アイテムは、オブジェクトであると想定しますがContact1、まだ配列(またはアイテムを保持するために使用しているコンテナー)にあります。

次の2つのいずれかを行う必要があります。

1)配列からアイテムを削除してから、リストビューを再生成します

2)非表示のアイテム(砂の提案など)のリストを保持してから、それらのビューを作成しないでください。

于 2012-09-05T04:18:18.843 に答える
0

カスタムアダプタを使用していて、スクロールでも非表示にする場合は、リストビューがクリックされたときに、1つのフラグを維持する必要があります。次にgetView()、位置に基づいてリストビューまたはリストビューアイテムを作成するか、すべてを非表示として非表示にすることができます。

于 2012-09-05T04:14:15.607 に答える
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;
    }

}

于 2012-09-05T04:49:53.237 に答える