2016-07-04 3 views
0

Я пытаюсь показать пользовательскую панель прогресса, используя this Сторонняя библиотека в 2 фрагментах TabLayout. Я показываю progressbar, в то время как в фоновом режиме я делаю volley stringrequest. Проблема в том, что индикатор прогресса не скрывается даже после того, как результат загружается из веб-службы. Эта проблема не возникает, когда я использую регулярный progressdialog с TabLayout. Хотя эта настраиваемая панель прогресса отлично работает в обычном макете, она не работает в TabLayout. Есть ли какая-то особая причина для этого? Благодарю.пользовательский диалог прогресса не скрывается

// custom_progress_layout.xml 
 

 

 
<?xml version="1.0" encoding="utf-8"?> 
 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="wrap_content" 
 
    android:layout_height="wrap_content" 
 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
 
    android:background="@android:color/transparent" 
 
    android:orientation="vertical"> 
 

 
    <com.wang.avi.AVLoadingIndicatorView 
 
     android:id="@+id/progress_bar" 
 
     android:layout_width="100dp" 
 
     android:layout_height="100dp" 
 
     android:layout_centerInParent="true" 
 
     android:visibility="gone" 
 
     app:indicator="BallClipRotatePulse" 
 
     app:indicator_color="@android:color/darker_gray"/> 
 

 
</RelativeLayout>
// One of the fragment of TabLayout 
 

 
public class FirstFragment extends Fragment { 
 

 
    private TextView tv1; 
 
    private CShowProgress cShowProgress; 
 
    private static final String CUSTOMERS_INFO = "My API"; 
 

 
    @Nullable 
 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
 
     return inflater.inflate(R.layout.first, container, false); 
 
    } 
 

 
    @Override 
 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
 
     super.onViewCreated(view, savedInstanceState); 
 

 
     tv1 = (TextView)view.findViewById(R.id.tv1); 
 

 
     cShowProgress = CShowProgress.getInstance(); 
 

 
     showCustomersDetails(); 
 
    } 
 

 
    private void showCustomersDetails() { 
 

 
     cShowProgress.showProgress(getActivity()); 
 

 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, CUSTOMERS_INFO, 
 
       new Response.Listener<String>() { 
 
        @Override 
 
        public void onResponse(String response) { 
 

 
         cShowProgress.hideProgress(); // THIS DOESNOT WORK AS PROGRESSBAR STILL SHOWS 
 

 
         try { 
 

 
          JSONObject jsonObject = new JSONObject(response); 
 

 
          JSONArray jsonArray = jsonObject.getJSONArray("aboutuser"); 
 

 
          for(int i=0; i<jsonArray.length(); i++){ 
 

 
           JSONObject obj = jsonArray.getJSONObject(i); 
 

 
           String str1 = "Contact:" + obj.getString("primary_contact"); 
 
           String str2 = "EMail:" + obj.getString("email"); 
 
           String total = str1 + "\n" + str2; 
 
           tv1.setText(total); 
 
          } 
 

 

 
         } catch (JSONException e) { 
 
          // JSON error 
 
          e.printStackTrace(); 
 
          Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
 
         } 
 
        } 
 
       }, new Response.ErrorListener() { 
 
      @Override 
 
      public void onErrorResponse(VolleyError error) { 
 
       Toast.makeText(getActivity(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show(); 
 
      } 
 
     }) { 
 
      @Override 
 
      protected Map<String, String> getParams() { 
 
       Map<String, String> params = new HashMap<String, String>(); 
 

 
       params.put("spaid", "145"); 
 
       params.put("customer_id", "64"); 
 
       return params; 
 
      } 
 

 
     }; 
 

 
     RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
 
     requestQueue.add(stringRequest); 
 
    } 
 

 

 

 
}
//Custom Class for 3rd party library of progressbar 
 

 
public class CShowProgress { 
 
    public static CShowProgress s_m_oCShowProgress; 
 
    public static Context m_Context; 
 
    public Dialog m_Dialog; 
 

 
    public CShowProgress(Context m_Context) { 
 
     this.m_Context = m_Context; 
 
    } 
 

 
    public static CShowProgress getInstance() { 
 
     if (s_m_oCShowProgress == null) { 
 
      s_m_oCShowProgress = new CShowProgress(m_Context); 
 
     } 
 
     return s_m_oCShowProgress; 
 
    } 
 

 
    public void showProgress(Context m_Context) { 
 
     m_Dialog = new Dialog(m_Context); 
 
     m_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
 
     m_Dialog.setContentView(R.layout.custom_progress_layout); 
 
     m_Dialog.findViewById(R.id.progress_bar).setVisibility(View.VISIBLE); 
 
     m_Dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
 
     m_Dialog.setCancelable(true); 
 
     m_Dialog.setCanceledOnTouchOutside(true); 
 
     m_Dialog.show(); 
 
    } 
 

 
    public void hideProgress() { 
 
     if (m_Dialog != null) { 
 
      m_Dialog.dismiss(); 
 
      m_Dialog = null; 
 
     } 
 
    } 
 
}

ответ

0

попробовать это,

public void hideProgress() { 
    if (m_Dialog != null) { 
     m_Dialog.setVisible(View.GONE); 
     m_Dialog = null; 
    } 
} 

или в onResponse()

cShowProgress.setVisible(View.GONE); 
+0

Не работает @Sathish. – Sammy

+0

попробуйте отредактированный ответ –

+0

Все еще не работает. Здесь проблема в том, что библиотека предназначена для progressbar (чья видимость может быть удалена), но пользовательский класс предназначен для ProgressDialog с настраиваемой компоновкой (чья видимость не может исчезнуть). – Sammy

0

Я сделал некоторые изменения в моем обычае прогресса диалогового класса и теперь он работает .. .

public class CShowProgress extends Dialog{ 
 
    private Dialog mpd = null; 
 
    private LayoutInflater inflater = null; 
 

 
    public CShowProgress(Context context) { 
 
     super(context) 
 
    } 
 

 
    
 

 
    public void showProgress(Context context) { 
 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 

 
     final View view = inflater.inflate(R.layout.custom_progress_layout, null); 
 

 
     mpd = new Dialog(context); 
 
     mpd.requestWindowFeature(Window.FEATURE_NO_TITLE); 
 
     mpd.setContentView(view); 
 
     mpd.findViewById(R.id.progress_bar).setVisibility(View.VISIBLE); 
 
     mpd.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
 
     mpd.setCancelable(true); 
 
     mpd.show(); 
 
    } 
 

 
    public void hideProgress() { 
 
     if (mpd != null) { 
 
      if (mpd.isShowing()){ 
 
       mpd.dismiss(); 
 
      } 
 
     } 
 
    } 
 
}

Смежные вопросы