使用PullToRefresh出现的问题

来源:互联网 发布:linux内核移植步骤 x86 编辑:程序博客网 时间:2024/06/07 10:47

1.view.getId()返回-1(android view.getId() returns -1)

回答1:

public View getView(final int row, final int column, View converView, ViewGroup parent) {
    if (converView == null) {
        converView = inflater.inflate(getLayoutResource(row, column), parent, false);
        if (row == -1){
            int viewId = converView.getId();
            setHeaderId(viewId, column+1);


        }  
    }
...     
}

回答2:

Inflate a new view hierarchy from the specified xml resource.
So when you call


converView = inflater.inflate(getLayoutResource(row, column), parent, false);
converView is just create by your layout inflater and have no ID. You should set ID manually like this


converView.setId(YOUR_GENERATED_ID);

我的问题答案是,我在pulltorefresh里已经重写了监听item的事件,但是那个item的监听事件不奏效,所以只能在适配器里写监听事件,而由于没有删除pulltorefresh的监听事件,导致获取的view.getId()为-1


2.我在适配器里写监听事件,发现一直不能是item里的子组件获取到焦点

网上的回答是:

回答1:

在item的xml根组件里改

android:
beforeDescendants //viewgroup会优先其子类控件而获取到焦点
afterDescendants //viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants //viewgroup会覆盖子类控件而直接获得焦点


回答2:

listView.setItemsCanFocus(true); //设置item项的子控件能够获得焦点(默认为false,即默认item项的子空间是不能获得焦点的

但pulltorefresh不能强制转化为listview


回答3:

在代码或者xml文件中对要获取的焦点的控件进行设置

focusable和focusableInTouchMode的值为true的设置


然而以上解答都为能解决我的问题,后来才发现问题出在我设置的监听组件,我设置监听的代码是view.setOnClickListener(public void onClick(View view) {});而我实际是想对view的子组件的按钮进行监听。我以为public void onClick(View view) {}的方法里可以里可以通过判断view.getId()是否为按钮组件的id来进行事件响应,然而事实是一直无法对我的item里的按钮就行监听。最终,只需改成对按钮的监听而不是item的view的监听


注 : 我在对pulltorefresh设置setOnItemOnclick的监听一直不响应,没有奏效,至今不知道原因,不过解决办法是在适配器里监听。而对于pulltorefresh的其他setOn...方法却可以起作用。不过都是在刷新的时候器作用,不刷新则没有作用。例如:setOnTouchListen,只有在刷新的时候起作用,但是我们想要的效果是和刷新没什么卵关系呀

0 0
原创粉丝点击