2017-01-28 15 views
-1

これは、私はそれが一瞬にスクロールした後、スクロールダウンして、すべての時間でリフレッシュされlist.Butの形で私のデータベースから自分のデータをフェッチするために使用私のコードです。私はそれが一番上にあるときだけリフレッシュを利用する必要があります。このスワイプのリフレッシュを一番上に限定する方法を教えてください。

import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.widget.SwipeRefreshLayout; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.ProgressBar; 
import android.widget.TextView; 

import com.shuan.Project.R; 
import com.shuan.Project.Utils.Common; 
import com.shuan.Project.adapter.ConnectAdapter; 
import com.shuan.Project.asyncTasks.GetHome; 
import com.shuan.Project.asyncTasks.GetPost; 
import com.shuan.Project.employer.PostViewActivity; 
import com.shuan.Project.list.Sample; 

import java.util.ArrayList; 
import java.util.HashMap; 

public class OffersFragment extends Fragment { 


    private ArrayList<Sample> list; 
    private ConnectAdapter adapter; 
private ListView listView; 
private HashMap<String, String> cData; 
private Common mApp; 
private Context mContext; 
private ProgressBar progressBar; 
private SwipeRefreshLayout swipe; 


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


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    mContext=getActivity(); 
    mApp= (Common) mContext.getApplicationContext(); 
    View view = inflater.inflate(R.layout.fragment_employer_home, container, false); 

    swipe = (SwipeRefreshLayout) view.findViewById(R.id.swipe); 
    listView = (ListView) view.findViewById(R.id.post); 
    progressBar = (ProgressBar) view.findViewById(R.id.progress_bar); 

    list = new ArrayList<Sample>(); 

    new GetPost(getActivity(), listView, progressBar, mApp.getPreference().getString(Common.u_id,""),"all", swipe).execute(); 


    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      TextView txt = (TextView) view.findViewById(R.id.jId); 
      TextView txt1= (TextView) view.findViewById(R.id.frm_id); 
      Intent in=new Intent(getActivity(),PostViewActivity.class); 
      in.putExtra("jId",txt.getText().toString()); 
      in.putExtra("frmId",txt1.getText().toString()); 
      in.putExtra("apply","no"); 
      startActivity(in); 
     } 
    }); 
    swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      new GetHome(getActivity(), listView, progressBar, mApp.getPreference().getString(Common.u_id, ""), "all",swipe).execute(); 
     } 
    }); 

    return view; 
    } 

} 

私のxmlファイル

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/swipe" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.shuan.Project.fragment.ConnectionFragment"> 


    <ProgressBar 
     android:id="@+id/progress_bar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" /> 

    <ListView 
     android:id="@+id/post" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:divider="@null" 
     android:visibility="gone" /> 
</RelativeLayout> 

+0

xmlファイルを質問に追加してください ' – K2evil

答えて

1

私は上記の質問に対する私自身の解決策を見つけました。上記のコードを以下のように変更して、問題を解決することができます。

import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.widget.SwipeRefreshLayout; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsListView; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.ProgressBar; 
import android.widget.TextView; 

import com.shuan.Project.R; 
import com.shuan.Project.Utils.Common; 
import com.shuan.Project.adapter.ConnectAdapter; 
import com.shuan.Project.asyncTasks.GetHome; 
import com.shuan.Project.asyncTasks.GetPost; 
import com.shuan.Project.employer.PostViewActivity; 
import com.shuan.Project.list.Sample; 

import java.util.ArrayList; 
import java.util.HashMap; 

public class OffersFragment extends Fragment implements AbsListView.OnScrollListener { 


private ArrayList<Sample> list; 
private ConnectAdapter adapter; 
private ListView listView; 
private HashMap<String, String> cData; 
private Common mApp; 
private Context mContext; 
private ProgressBar progressBar; 
private SwipeRefreshLayout swipe; 
private int preLast; 


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


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    mContext=getActivity(); 
    mApp= (Common) mContext.getApplicationContext(); 
    View view = inflater.inflate(R.layout.fragment_employer_home, container, false); 

    swipe = (SwipeRefreshLayout) view.findViewById(R.id.swipe); 
    listView = (ListView) view.findViewById(R.id.post); 
    progressBar = (ProgressBar) view.findViewById(R.id.progress_bar); 

    list = new ArrayList<Sample>(); 

    new GetPost(getActivity(), listView, progressBar, mApp.getPreference().getString(Common.u_id,""),"all", swipe).execute(); 


    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      TextView txt = (TextView) view.findViewById(R.id.jId); 
      TextView txt1= (TextView) view.findViewById(R.id.frm_id); 
      Intent in=new Intent(getActivity(),PostViewActivity.class); 
      in.putExtra("jId",txt.getText().toString()); 
      in.putExtra("frmId",txt1.getText().toString()); 
      in.putExtra("apply","no"); 
      startActivity(in); 
     } 
    }); 
    listView.setOnScrollListener(this); 
    swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      new GetHome(getActivity(), listView, progressBar, mApp.getPreference().getString(Common.u_id, ""), "all",swipe).execute(); 
     } 
    }); 

    return view; 
} 

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

} 

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

    if (view.getId() == R.id.post) { 
     if (firstVisibleItem == 0) { 
      swipe.setEnabled(true); 
      int lastItem = firstVisibleItem + visibleItemCount; 
      if (lastItem == totalItemCount) { 
       if (preLast != lastItem) { 
        preLast = lastItem; 
        //Toast.makeText(getActivity(), "In Last", Toast.LENGTH_SHORT).show(); 
       } 

      }else{ 

      } 
     } else { 
      swipe.setEnabled(false); 
     } 
    } 
    } 
} 
+0

私は時間を費やしてくれてありがとう:-) –

0

変更してXMLレイアウトSwipeRefreshLayoutのみスクロール可能なビュー(あなたのケースリストビュー)を包むようにします。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.shuan.Project.fragment.ConnectionFragment"> 

    <ProgressBar 
     android:id="@+id/progress_bar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" /> 

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

     <ListView 
      android:id="@+id/post" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:divider="@null" 
      android:visibility="gone" /> 
    </android.support.v4.widget.SwipeRefreshLayout> 
</RelativeLayout> 
+0

私は自宅でも同じxmlファイルを使用していますが、問題はありません。そこで私はonscroll関数を作成しました –

+0

実際には問題がありますが、onScrollメソッドの中にコードを記述してリストがトップになるかどうかを確認してからリフレッシュメソッドを実行します。場合によっては、複数のスクロール可能なビューがある場合など、ハッキングが必要な場合もありますが、あなたの場合は、SwipeRefreshLayoutをListViewだけを囲むように置くだけで、彼らはあなたのために仕事をします。 –

1
<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/swipe_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <com.enhancedListView.EnhancedListView 
     android:id="@+id/listaNoticias" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="6dp" 
     android:layout_marginRight="6dp" 
     android:layout_marginTop="5dp" > 
    </com.enhancedListView.EnhancedListView> 

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


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 
    view = inflater.inflate(R.layout.principal, container, false); 

    swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container); 
    swipeLayout.setOnRefreshListener(this); 
    swipeLayout.setColorSchemeColors(android.R.color.holo_green_dark, 
      android.R.color.holo_red_dark, 
      android.R.color.holo_blue_dark, 
      android.R.color.holo_orange_dark); (...) 

@Override 
public void onRefresh() { 
    new myTask().execute();  
} 
関連する問題