31

ListView自分のアダプターを使った習慣があります。Buttonアイテム内 のaのクリックを処理していますが、このクリックでを非表示にしListViewたいと考えてListViewいます。

ListViewアダプタからにアクセスする方法がわかりません。

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;
    }
}
4

3 に答える 3

70

ViewGroup parentViewによって返されたの親への参照を保持getView()します。これは、あなたの場合はカスタムリストビューです。

@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;
}
于 2012-06-06T08:33:04.697 に答える
8

これの代わりに、アダプタのコンストラクタを介してリストビューの参照を渡し、それをローカルのリストビュー変数に格納できます。これを使用して、Listviewsメソッドにアクセスできます。

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

次に、mListViewを介してアクティビティのリストビューにアクセスします。

于 2013-10-16T10:20:13.163 に答える
1

私の場合、GridItemClickListnerは何らかの理由で機能しませんでした。これを使用してAdapterクラスからGridviewにアクセスします

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

「GridView」クラスを拡張する「ClockGridView」。

于 2017-06-09T12:52:49.193 に答える