2012-06-06 3 views
25

Mam niestandardowy ListView z własnym adapterem. Obsługuję kliknięcie na Button w moim egzemplarzu ListView i chcę, aby ListView stał się niewidoczny po tym kliknięciu. Nie mam pojęcia, jak uzyskać dostęp do adaptera ListView.Jak uzyskać dostęp do ListView z adaptera

public class ScheduleArrayAdapter extends ArrayAdapter<ScheduleListItem> { 

    /*...*/ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(id, null); 
     } 
     final ScheduleListItem o = items.get(position); 
     if (o != null) { 

     /*...*/   

      Button details=(Button)v.findViewById(R.id.btn_details); 
      details.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //HOW TO MAKE (R.id.lv_schedule) TO BECOME INVISIBLE HERE? 
       } 
      }); 
     } 
     return v; 
    } 
} 
+0

Myślałem, że cały punkt posiadania adaptera polega na rozłączeniu logiki z ListView. – sudocoder

Odpowiedz

64

ViewGroup parent posiada odniesienie do nadrzędnego View zwróconej przez getView(), który w danym przypadku jest niestandardowy ListView.

@Override 
public View getView(int position, View convertView, final ViewGroup parent) { 
    ... 
    details.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      parent.setVisibility(View.INVISIBLE); // or View.GONE 
     } 
    }); 
    ... 
    return v; 
} 
8

Zamiast tego można przekazać odwołanie do widoku list za pośrednictwem konstruktora adaptera i zapisać go w lokalnej zmiennej Listview. Można to wykorzystać do dostępu swoją Listviews method.Like to

public ViewPackagesAdapter(Activity mActivity, ListView cmgListView) { 
     this.mActivity = mActivity; 
     this.mListView=cmgListView; 
    } 

teraz dostęp ListView czy działalność jest przez mListView ..

0

W moim przypadku GridItemClickListner nie pracował dla jakiegoś powodu. Mam dostęp do Gridview z adapterem klasy użyciu tego

public View getView(final int position, View convertView, ViewGroup parent) { 
     convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ((ClockGridView) v.getParent()).performItemClick(v, position, v.getId()); 
         (OR) 
      ((ClockGridView)parent).performItemClick(v, position, v.getId()); 
    } 
}); 
} 

"ClockGridView", która rozszerza klasę "GridView".