刷新当前行按钮单击getView Android

时间:2015-09-01 15:24:51

标签: android listview

getView中的ArrayAdapter (BaseAdapter)方法内有:

        expand.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                updateOneRow(pos, (Integer)v.getTag());
            }
        });

其中 updateOneRow 是:

            rcell.getLayoutParams().height = 250; // row height (r.layout)
            expand.setVisibility(View.INVISIBLE);
            collapse.setVisibility(View.VISIBLE);

            if (mClickListener2 != null) {
                mClickListener2.onBtnClick(tag);
            }

mClickListener2 是一个传递给ArrayAdapter构造函数的对象,如下所示:

new BtnClickListener(){

        @Override
        public void onBtnClick(int position) {
            updateItemAtPosition(position, buildingLV); // buildingLV is my list view
        }
 }

updateItemAtPosition 是:

private void updateItemAtPosition(int position, ListView mListView) {
    int visiblePosition = mListView.getFirstVisiblePosition();
    View view = mListView.getChildAt(position - visiblePosition);
    mListView.getAdapter().getView(position, view, mListView);
}

2 个答案:

答案 0 :(得分:2)

以下是为我工作的解决方案 -
假设您的getView方法中有其他代码 - 使用setTag添加对按钮对象的当前行的引用。

public View getView(int position, View convertView, ViewGroup parent) {

    expandBtn.setTag(convertView);     
    expandBtn.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            View rowView = (View) v.getTag();
            // update you view here.  

            rcell.getLayoutParams().height = 120;
            collapsebtn.setVisibility(View.INVISIBLE);

                    // Update only this row now                    

         }
    });
    return convertView;
}

答案 1 :(得分:0)

无论你对视图做什么都只是当前项目的一个..现在如果在某些情况下不应该是一个监听器...而你正在回收这些项目..记得删除监听器