Android SwipeRefreshLayout onRefresh方法不';行不通

Android SwipeRefreshLayout onRefresh方法不';行不通,android,listview,swiperefreshlayout,Android,Listview,Swiperefreshlayout,我将ListView添加到布局中。但是,onRefresh方法不起作用。listview附带数据,我想滚动listview会阻止onRefresh工作。我使用的方法在第一个项目可见时启用swipeContainer。你能检查一下我的代码并告诉我我做错了什么吗 以下是我的活动: public class TimelineActivity extends Activity { private SwipeRefreshLayout swipeContainer; JSONObject

我将ListView添加到布局中。但是,onRefresh方法不起作用。listview附带数据,我想滚动listview会阻止onRefresh工作。我使用的方法在第一个项目可见时启用swipeContainer。你能检查一下我的代码并告诉我我做错了什么吗

以下是我的活动:

public class TimelineActivity extends  Activity {
    private SwipeRefreshLayout swipeContainer;
    JSONObject jsonobject;
    JSONObject jsonobj;
    CityList list;
    ArrayList<CityInfo> myList;
    SharedPreferences sp;
    JSONArray jArray = null;
    JSONArray jResult = null;
    Object info;
    String resultmsg = null;
    String json;
    ListView theListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        swipeContainer = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);
        // Setup refresh listener which triggers new data loading
        swipeContainer.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {
                // Your code to refresh the list here.
                // Make sure you call swipeContainer.setRefreshing(false) when
                // once the network request has completed successfully.
                Log.i("refresh","refreshing");
                new DownloadJSON().execute();
            } 
        });

        ViewGroup vg = (ViewGroup) findViewById(R.id.mainlayoutarea);
        ViewGroup.inflate(TimelineActivity.this, R.layout.city_list, vg);
        setContentView(R.layout.city_list);
        theListView = (ListView) findViewById(R.id.cityList);

        theListView.setOnScrollListener(new OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                boolean enable = false;
                if(theListView != null && theListView.getChildCount() > 0){
                    // check if the first item of the list is visible
                    boolean firstItemVisible = theListView.getFirstVisiblePosition() == 0;
                    // check if the top of the first item is visible
                    boolean topOfFirstItemVisible = theListView.getChildAt(0).getTop() == 0;
                    // enabling or disabling the refresh layout
                    enable = firstItemVisible && topOfFirstItemVisible;
                }
                swipeContainer.setEnabled(enable);
            }
        });

        swipeContainer.setColorSchemeResources(android.R.color.holo_blue_light, 
                android.R.color.holo_green_light, 
                android.R.color.holo_orange_light, 
                android.R.color.holo_red_light);

        new DownloadJSON().execute();

    }
公共类TimelineActivity扩展活动{
私人swipeContainer;
JSONObject JSONObject;
JSONObject jsonobj;
城市名单;
ArrayList myList;
共享参考sp;
JSONArray-jArray=null;
JSONArray jResult=null;
对象信息;
字符串resultsg=null;
字符串json;
列表视图列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
swipeContainer=(SwipeRefreshLayout)findViewById(R.id.swipeContainer);
//设置触发新数据加载的刷新侦听器
swipeContainer.setOnRefreshListener(新的OnRefreshListener(){
@凌驾
公共void onRefresh(){
//您的代码将刷新此处的列表。
//确保在以下情况下调用swipeContainer.setRefreshing(false)
//一旦网络请求成功完成。
Log.i(“刷新”、“刷新”);
新建下载JSON().execute();
} 
});
ViewGroup vg=(ViewGroup)findViewById(R.id.mainlayoutarea);
视图组。充气(TimelineActivity.this,R.layout.city_list,vg);
setContentView(R.layout.city_列表);
ListView=(ListView)findViewById(R.id.cityList);
setOnScrollListener(新的OnScrollListener(){
@凌驾
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
}
@凌驾
public void onScroll(AbsListView视图,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
布尔启用=假;
if(theListView!=null&&theListView.getChildCount()>0){
//检查列表的第一项是否可见
布尔值firstItemVisible=ListView.getFirstVisiblePosition()=0;
//检查第一项的顶部是否可见
boolean-topOfFirstItemVisible=theListView.getChildAt(0.getTop()==0;
//启用或禁用刷新布局
enable=firstItemVisible&&topOfFirstItemVisible;
}
swipeContainer.setEnabled(启用);
}
});
swipeContainer.setColorSchemeResources(android.R.color.holo_蓝光,
android.R.color.holo_绿色_灯,
android.R.color.holo_橙色_灯,
android.R.color.holo_红灯);
新建下载JSON().execute();
}

如果我没有误解的话,您必须将SwipeRefreshLayout分卡并实现。对于ListView,应该足以返回

firstVisibileItem != 0
编辑:(检查打字错误)


你能提供一个片段吗?我不知道如何实现这个。我做到了。看一看
public class MySwipeRefreshLayout extends SwipeRefreshLayout {

      private ListView mListView;

      public  boolean canChildScrollUp () {
           if (mListView == null) {
                mListView = (ListView) findViewById(R.id.idlistview);
           }
          return mListView.getFirstVisiblePosition() != 0;
      }


}