Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OnItemClickListener在带有CustomAdapter的片段中不';行不通_Java_Android_Xml_Listview_Android Fragments - Fatal编程技术网

Java OnItemClickListener在带有CustomAdapter的片段中不';行不通

Java OnItemClickListener在带有CustomAdapter的片段中不';行不通,java,android,xml,listview,android-fragments,Java,Android,Xml,Listview,Android Fragments,如标题中所述,我尝试在片段中使用一个侦听器(它不扩展ListFragment,它只是一个片段),但侦听器似乎没有响应 它是如何工作的: 我创建了一个片段,其中包含一个带有自定义ListViewItem的ListView,内容是从mysql表下载的,其中有一个名为Downloader的类连接到PHP文件,还有一个名为Parser的类,该类将给定的JSON结果转换为字符串。有一个CustomAdapter,它获取结果并使用解析器的结果更改自定义ListViewItem的TextView 创建List

如标题中所述,我尝试在片段中使用一个侦听器(它不扩展ListFragment,它只是一个片段),但侦听器似乎没有响应

它是如何工作的: 我创建了一个片段,其中包含一个带有自定义ListViewItem的ListView,内容是从mysql表下载的,其中有一个名为Downloader的类连接到PHP文件,还有一个名为Parser的类,该类将给定的JSON结果转换为字符串。有一个CustomAdapter,它获取结果并使用解析器的结果更改自定义ListViewItem的TextView

创建ListView时不会出现问题,内容会显示出来。 片段代码:

public class BiologyFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {


String url = "URL FOR PHP - just cut that out :D";
private SwipeRefreshLayout ll;
private ListView lv;
private boolean isRefreshing;
private Handler refreshhandler = new Handler();

public BiologyFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    ll = (SwipeRefreshLayout)inflater.inflate(R.layout.fragment_biology, container, false);

    //set up listener for pull to refresh
    ll.setOnRefreshListener(this);

    //Listview for the to be populated
    lv = (ListView) ll.findViewById(R.id.lv);

    //download on opening
    new Downloader(getContext(), url, lv).execute();

    //PROBLEM HERE !
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Toast.makeText(getContext(), "CLICKED " + position, Toast.LENGTH_SHORT).show();
        }
    });

    lv.setOnScrollListener(new AbsListView.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 (lv != null && lv.getChildCount() > 0) {
                // check if the first item of the list is visible
                boolean firstItemVisible = lv.getFirstVisiblePosition() == 0;
                // check if the top of the first item is visible
                boolean topOfFirstItemVisible = lv.getChildAt(0).getTop() == 0;
                // enabling or disabling the refresh layout
                enable = firstItemVisible && topOfFirstItemVisible;
            }
            ll.setEnabled(enable);
        }

    });

    return ll;
}

@Override
public void onRefresh() {
    new Downloader(getContext(), url, lv).execute();
    refreshhandler.post(refreshing);
}

Runnable refreshing = new Runnable() {
    @Override
    public void run() {
        if(isRefreshing){
            // re run the verification after 1 second
        }else{
            // stop the animation after the data is fully loaded
            ll.setRefreshing(false);
        }
    }
};


}
公共类BiologyFragment扩展片段实现SwipeRefreshLayout.OnRefreshListener{
String url=“url FOR PHP-删掉它:D”;
私人游泳池;
私有ListView lv;
私有布尔是反擦痕;
私有处理程序refreshhandler=新处理程序();
公共生物碎片(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
ll=(SwipeRefreshLayout)充气器。充气(R.layout.fragment_生物学,容器,假);
//设置要刷新的拉取侦听器
ll.setOnRefreshListener(此);
//要填充的列表的列表视图
lv=(ListView)ll.findViewById(R.id.lv);
//开放下载
新的下载程序(getContext(),url,lv).execute();
//这里有问题!
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Toast.makeText(getContext(),“CLICKED”+位置,Toast.LENGTH\u SHORT.show();
}
});
lv.setOnScrollListener(新的AbsListView.OnScrollListener(){
@凌驾
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
}
@凌驾
public void onScroll(AbsListView视图、int firstVisibleItem、int visibleItemCount、int totalItemCount){
布尔启用=假;
如果(lv!=null&&lv.getChildCount()>0){
//检查列表的第一项是否可见
布尔值firstItemVisible=lv.getFirstVisiblePosition()==0;
//检查第一项的顶部是否可见
boolean-topOfFirstItemVisible=lv.getChildAt(0).getTop()=0;
//启用或禁用刷新布局
enable=firstItemVisible&&topOfFirstItemVisible;
}
ll.setEnabled(启用);
}
});
返回ll;
}
@凌驾
公共void onRefresh(){
新的下载程序(getContext(),url,lv).execute();
refreshhandler.post(刷新);
}
Runnable刷新=新建Runnable(){
@凌驾
公开募捐{
如果(isRefreshing){
//1秒后重新运行验证
}否则{
//数据完全加载后停止动画
ll.设置刷新(假);
}
}
};
}
片段的XML:


如果您需要ListViewItem XML或CustomAdapter、Downloader或Parser类,请告诉我,我将在这里发布它,我只是不确定这些是否是解决问题所必需的


谢谢你的关注

不应将根目录转换为
SwipeRefreshLayout
,因此不应使用:

 ll = (SwipeRefreshLayout)inflater.inflate(R.layout.fragment_biology, container, false);
使用:


不应将根目录转换为
SwipeRefreshLayout
,因此不应使用:

 ll = (SwipeRefreshLayout)inflater.inflate(R.layout.fragment_biology, container, false);
使用:


这似乎不起作用“需要android.support.v4.widget.SwipeRefreshLayout找到android.view.view”您的代码可以正常工作,但我不能再刷新了,当我尝试时,圆圈会一直在那里,什么也不做。此外,它也不能解决我在onItemClickListener:/@Justin中遇到的问题。您应该为SwiperFreshLayout设置setOnRefreshListener,并在listener中处理此问题。它也适用于onClickListener这只是一个简单的代码,让你知道你的代码应该是什么样子,可能需要一些修改。我发现实际上我只需要在设置适配器时设置一个OnItemClickListener,所以我将一个OnItemClickListener放入解析器,结果很好^^^这似乎不起作用“需要找到android.support.v4.widget.SwipeRefreshLayout android.view.view“您的代码确实可以正常工作,但我不能再刷新了,当我尝试时,圆圈一直在那里,什么也不做。此外,它也不能解决我在onItemClickListener:/@Justin中遇到的问题。您应该为SwiperFreshLayout设置setOnRefreshListener,并在listener中处理此问题。它也适用于onClickListener这只是一个简单的代码,让你知道你的代码应该是什么样子,它可能需要一些修改。我发现实际上我只需要在设置适配器时设置一个OnItemClickListener,所以我将一个OnItemClickListener放入解析器,结果很好^^
View rootView = inflater.inflate(R.layout.fragment_biology, container, false);
lv = (ListView) rootView.findViewById(R.id.lv);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Toast.makeText(getContext(), "CLICKED " + position, Toast.LENGTH_SHORT).show();
        }
    });
<!-- rest of layout -->

<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/swipe_refresh_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView">

    </ListView>

</android.support.v4.widget.SwipeRefreshLayout>

<!-- rest of layout-->