0

У меня есть одна активность страница, в которой у меня есть два фрагмента. В 1-ом фрагменте есть список с основным списком категорий с функцией pulltorefresh.В одном прохождении деятельности Данные от первого фрагмента до второго фрагмента сквозной кнопки Нажмите

Когда я нажимаю на элемент списка, он покажет подкатегорию своего второго фрагмента. Все, как он должен работать.

Но моя проблема в том, когда активность загружает 1-й фрагмент шоу, а также сообщение нет подключения к Интернету не показывает в Toast, но когда я нажал на его элемент списка ничего не случилось со 2-го фрагмента

коды здесь

Это одна страница деятельности, которая имеет два фрагмента

public class ServiceActivity extends Activity { 

CategoryDetails mainCategory; 
SimpleSideDrawer slide_me; 
public ImageButton imgBack; 
static View fragmentsub; 
static View fragmentmain; 

@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_service); 

    fragmentmain = findViewById(R.id.fragmentmain); 
    fragmentsub = findViewById(R.id.fragmentsub); 
    imgBack = (ImageButton)findViewById(R.id.imgBackBtn); 
    imgBack.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      finish(); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_service, menu); 
    return true; 
} 

первого фрагмента

public class FreagmentMainCategory extends Fragment{ 

    private LinearLayout llLayoutmain; 
    private FragmentActivity faActivitymain; 
    private ListView lstCategoryList; 
    private SelectCategoryTask mAuthTask = null; 
    private View mServiceStatusView; 
    CategoryDetails mainCategory; 
    private categoryListAdapter adapterList;  
    static final int MENU_MANUAL_REFRESH = 0; 
    static final int MENU_DISABLE_SCROLL = 1; 
    static final int MENU_SET_MODE = 2; 
    static final int MENU_DEMO = 3; 
    private View lstListView; 
    private PullToRefreshListView mPullRefreshListView; 

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

     //faActivitymain = (FragmentActivity) super.getActivity(); 
     View view = inflater.inflate(R.layout.activity_fragment_main,container, false); 

     this.getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 
     FontUtils.setCustomFont(getActivity().findViewById(R.id.mainView), getActivity().getAssets()); 

     lstListView= view.findViewById(R.id.lstCategoryView); 
     mPullRefreshListView = (PullToRefreshListView)view.findViewById(R.id.lstCategory); 
     // Set a listener to be invoked when the list should be refreshed. 
     mPullRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() { 
      @Override 
      public void onRefresh(PullToRefreshBase<ListView> refreshView) { 
       String label = DateUtils.formatDateTime(getActivity().getApplicationContext(), System.currentTimeMillis(), 
         DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); 
       // Update the LastUpdatedLabel 
       refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); 
       // Do work to refresh the list here. 
       new GetDataTask().execute(); 
      } 
     }); 
     mPullRefreshListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() { 
      @Override 
      public void onLastItemVisible() {     
      } 
     }); 
     lstListView=(View)view.findViewById(R.id.lstCategoryView); 

     lstCategoryList = ((PullToRefreshListView)view.findViewById(R.id.lstCategory)).getRefreshableView();    
     //lstCategoryList = (ListView) inflater.inflate(R.layout.activity_fragment_main, container, false); 
     lstCategoryList = mPullRefreshListView.getRefreshableView();    
     registerForContextMenu(lstCategoryList);       
     mServiceStatusView = view.findViewById(R.id.service_status); 
     showProgress(true); 
     mAuthTask = new SelectCategoryTask(); 
     mAuthTask.execute((Void) null); 
     lstCategoryList.setOnItemClickListener(new OnItemClickListener(){ 
       public void onItemClick(AdapterView<?> parent, View v, int position,long arg3) {  
        Fragment fragment = new Fragment(); 
        Bundle bundle = new Bundle();         
        bundle.putString("MainCategoryName", mainCategory.masterinfo.get(position-1).maincatname); 
        fragment.setArguments(bundle); 
      } 
     }); 
     return view; 
    } 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getActivity().getMenuInflater().inflate(R.menu.activity_service, menu); 
     return true; 
    }  
    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
    private void showProgress(final boolean show) { 
     // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow 
     // for very easy animations. If available, use these APIs to fade-in 
     // the progress spinner. 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
      int shortAnimTime = getResources().getInteger(
        android.R.integer.config_shortAnimTime); 
      mServiceStatusView.setVisibility(View.VISIBLE); 
      mServiceStatusView.animate().setDuration(shortAnimTime) 
        .alpha(show ? 1 : 0) 
        .setListener(new AnimatorListenerAdapter() { 
         @Override 
         public void onAnimationEnd(Animator animation) { 
          mServiceStatusView.setVisibility(show ? View.VISIBLE 
            : View.GONE); 
         } 
        }); 
      lstListView.setVisibility(View.VISIBLE); 
      lstListView.animate().setDuration(shortAnimTime) 
        .alpha(show ? 0 : 1) 
        .setListener(new AnimatorListenerAdapter() { 
         @Override 
         public void onAnimationEnd(Animator animation) { 
          lstCategoryList.setVisibility(show ? View.GONE 
            : View.VISIBLE); 
         } 
        });   

     } else { 
      // The ViewPropertyAnimator APIs are not available, so simply show 
      // and hide the relevant UI components. 
      mServiceStatusView.setVisibility(show ? View.VISIBLE : View.GONE); 
      lstListView.setVisibility(show ? View.GONE : View.VISIBLE);       
     } 
    }  
    public class GetDataTask extends AsyncTask<Void, Void, Boolean> { 
     @Override 
     protected Boolean doInBackground(Void... params) { 
      // Simulates a background job. 
      ServerAccess sa=new ServerAccess(); 
      mainCategory=sa.GetMainCategory(); 
      return true; 
     } 
     @Override 
     protected void onPostExecute(Boolean result) { 
      if(mainCategory==null){ 
       Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_check_network), Toast.LENGTH_LONG).show(); 
       lstCategoryList.setAdapter(null); 
      }else if(mainCategory.code.equals("MOB01")){ 
       adapterList=new categoryListAdapter(getActivity().getApplicationContext(), mainCategory.masterinfo); 
       lstCategoryList.setAdapter(null); 
      }else if(mainCategory.code.equals("MOB02")){      
       lstCategoryList.setAdapter(null); 
      }else{ 
       Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_genric_error), Toast.LENGTH_LONG).show(); 
       lstCategoryList.setAdapter(null); 
      } 
      // Call onRefreshComplete when the list has been refreshed. 
      mPullRefreshListView.onRefreshComplete(); 

      super.onPostExecute(result); 
     } 
    } 

    public class SelectCategoryTask extends AsyncTask<Void, Void, Boolean> { 

     @Override 
     protected Boolean doInBackground(Void... params) {   
      ServerAccess sa=new ServerAccess(); 
      mainCategory=sa.GetMainCategory();   
      return true; 
     } 
     @Override 
     protected void onPostExecute(final Boolean success) { 
      mAuthTask = null; 
      showProgress(false); 
      if(mainCategory==null){ 
       Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_check_network), Toast.LENGTH_LONG).show(); 
       lstCategoryList.setAdapter(null); 
      }else if(mainCategory.code.equals("MOB01")){ 
       adapterList=new categoryListAdapter(getActivity().getApplicationContext(), mainCategory.masterinfo); 
       lstCategoryList.setAdapter(adapterList); 
      }else if(mainCategory.code.equals("MOB02")){ 
       lstCategoryList.setAdapter(null); 
      }else{ 
       Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_genric_error), Toast.LENGTH_LONG).show(); 
       lstCategoryList.setAdapter(null); 
      }   
     } 
     @Override 
     protected void onCancelled() { 
      mAuthTask = null; 
      showProgress(false); 
     } 
    } 
    class categoryListAdapter extends BaseAdapter {   
     List<Category> mainItems; 
     Context myContext; 
     public categoryListAdapter(Context context, List<Category> items) { 
      myContext = context; 
      mainItems = items;    
     } 
     public int getCount() {   
      return mainItems.size(); 
     } 
     public Object getItem(int index) {   
      return mainItems.get(index); 
     } 
     public long getItemId(int position) { 
      return position; 
     }   
     @Override 
     public View getView(int position, View convertView, ViewGroup parent ) { 
      // TODO Auto-generated method stub 
      RelativeLayout layout = new RelativeLayout(myContext);   
      TextView tv = new TextView(myContext); 
      tv.setText(mainItems.get(position).maincatname); 
      tv.setGravity(Gravity.LEFT); 
      tv.setTextSize(16); 
      tv.setPadding(20, 20, 0, 20); 
    tv.setTextColor(myContext.getResources().getColor(R.color.BlackColor)); 
      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams 
      (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      layout.addView(tv,lp);   
      return layout; 
     } 
    } 

}

второй фрагмент

public class FragmentSubCategory extends Fragment{ 
private View mSubCategoryStatusView; 
private subCategoryListAdapter subAdapterList; 
private SelectSubCategoryTask mSubAuthTask = null; 
private ExpandableListView lstSubCategoryList; 
String MainCategoryId="-1",MainCategoryName; 
SubCategoryDetails mainSubCategory; 
@SuppressLint("NewApi") 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 

    this.getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 
    FontUtils.setCustomFont(getActivity().findViewById(R.id.subfragment), getActivity().getAssets()); 

    View view = inflater.inflate(R.layout.activity_fragment_sub,container, false); 

    lstSubCategoryList = (ExpandableListView)view.findViewById(R.id.lstSubCategory); 
    mSubCategoryStatusView = view.findViewById(R.id.sub_category_status); 
    Bundle bundle = getArguments(); 
    try{   
     MainCategoryName = bundle.getString("MainCategoryName"); 
    }catch(Exception ex){ 
     MainCategoryName=""; 
    } 
    try{   
     MainCategoryId = bundle.getString("MainCategoryId"); 
    }catch(Exception ex){ 
     MainCategoryId="-1"; 
    } 

    lstSubCategoryList.setOnChildClickListener(new OnChildClickListener() { 
     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, 
       int groupPosition, int childPosition, long id) { 
       Intent vendorListIntent=new Intent(getActivity().getApplication(),VendorListByCategoryActivity.class); 
       vendorListIntent.putExtra("typeid", mainSubCategory.masterinfo.get(groupPosition).type.get(childPosition).typeid); 
       vendorListIntent.putExtra("subCategoryId", mainSubCategory.masterinfo.get(groupPosition).subcatid); 
       vendorListIntent.putExtra("mainCategoryId", MainCategoryId); 
       startActivity(vendorListIntent); 

      return false; 
     } 
    }); 
    showSubCategoryProgress(true); 
    mSubAuthTask = new SelectSubCategoryTask(); 
    mSubAuthTask.execute((Void) null); 
    return view; 
} 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getActivity().getMenuInflater().inflate(R.menu.activity_sub_category, menu); 
    return true; 
} 

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
private void showSubCategoryProgress(final boolean show) { 
    // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow 
    // for very easy animations. If available, use these APIs to fade-in 
    // the progress spinner. 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
     int shortAnimTime = getResources().getInteger(
       android.R.integer.config_shortAnimTime); 

     mSubCategoryStatusView.setVisibility(View.VISIBLE); 
     mSubCategoryStatusView.animate().setDuration(shortAnimTime) 
       .alpha(show ? 1 : 0) 
       .setListener(new AnimatorListenerAdapter() { 
        @Override 
        public void onAnimationEnd(Animator animation) { 
         mSubCategoryStatusView.setVisibility(show ? View.VISIBLE 
           : View.GONE); 
        } 
       }); 
     lstSubCategoryList.setVisibility(View.VISIBLE); 
     lstSubCategoryList.animate().setDuration(shortAnimTime) 
       .alpha(show ? 0 : 1) 
       .setListener(new AnimatorListenerAdapter() { 
        @Override 
        public void onAnimationEnd(Animator animation) { 
         lstSubCategoryList.setVisibility(show ? View.GONE 
           : View.VISIBLE); 
        } 
       });   
    } else { 
     // The ViewPropertyAnimator APIs are not available, so simply show 
     // and hide the relevant UI components. 
     mSubCategoryStatusView.setVisibility(show ? View.VISIBLE : View.GONE); 
     lstSubCategoryList.setVisibility(show ? View.GONE : View.VISIBLE);   
    } 
} 
public class SelectSubCategoryTask extends AsyncTask<Void, Void, Boolean> {  
    @Override 
    protected Boolean doInBackground(Void... params) { 
     ServerAccess sa=new ServerAccess(); 
     mainSubCategory=sa.GetTypesMasters(Integer.parseInt(MainCategoryId));   
     return true; 
    } 
    @Override 
    protected void onPostExecute(final Boolean success) { 
     mSubAuthTask = null;    
     if(mainSubCategory==null){ 
      showSubCategoryProgress(false); 
      Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_check_network), Toast.LENGTH_LONG).show();     
      //Message no category found.  
     }else if(mainSubCategory.code.equals("MOB02")){ 
      showSubCategoryProgress(false); 
      Toast.makeText(getActivity().getApplicationContext(), mainSubCategory.msg, Toast.LENGTH_LONG).show(); 
     }else if(mainSubCategory.code.equals("MOB01")){ 
      showSubCategoryProgress(false); 
      subAdapterList=new subCategoryListAdapter(getActivity().getApplicationContext(), mainSubCategory.masterinfo); 
      lstSubCategoryList.setAdapter(subAdapterList); 
      //set adapter 
     }else{ 
      showSubCategoryProgress(false); 
      Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.error_genric_error), Toast.LENGTH_LONG).show(); 
      //No Category message 
     } 
    } 
    @Override 
    protected void onCancelled() { 
     mSubAuthTask = null; 
     showSubCategoryProgress(false); 
    } 
} 
public class subCategoryListAdapter extends BaseExpandableListAdapter {  
    private Context myContext; 
    private List<SubCategory> _listDataHeader; // header titles 
    // child data in format of header title, child title    
    public subCategoryListAdapter(Context context, List<SubCategory> listDataHeader) { 
     this.myContext = context; 
     this._listDataHeader = listDataHeader;   
    }  
    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
     return this._listDataHeader.get(groupPosition).type.get(childPosititon).typename; 
    }  
    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    }  
    @Override 
    public View getChildView(int groupPosition, final int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 
     final String childText = (String) getChild(groupPosition, childPosition);    
     RelativeLayout layout = new RelativeLayout(myContext); 
     TextView txtListChild = new TextView(myContext); 
     txtListChild.setText(childText); 
     txtListChild.setGravity(Gravity.LEFT); 
     txtListChild.setTextSize(16);   
     txtListChild.setPadding(60, 20, 0, 20); 
     txtListChild.setTextColor(myContext.getResources().getColor(R.color.BlackColor)); 
     layout.addView(txtListChild);     
     return layout; 
    }  
    @Override 
    public int getChildrenCount(int groupPosition) { 
     return this._listDataHeader.get(groupPosition).type.size(); 
    }  
    @Override 
    public Object getGroup(int groupPosition) { 
     return this._listDataHeader.get(groupPosition).subcatname; 
    }  
    @Override 
    public int getGroupCount() { 
     return this._listDataHeader.size(); 
    }  
    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    }  
    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     int noOfType= getChildrenCount(groupPosition); 
     RelativeLayout layout = new RelativeLayout(myContext); 
     TextView lblListHeader = new TextView(myContext); 
     lblListHeader.setText(headerTitle.toUpperCase()); 
     lblListHeader.setGravity(Gravity.LEFT);   
     lblListHeader.setTextSize(18); 
     lblListHeader.setPadding(50, 20, 0, 20); 
     lblListHeader.setTextColor(myContext.getResources().getColor(R.color.BlackColor)); 
     layout.addView(lblListHeader); 
     RelativeLayout.LayoutParams noOfTypesLp = new RelativeLayout.LayoutParams 
     (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     noOfTypesLp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     TextView txtNoOfType = new TextView(myContext); 
     txtNoOfType.setText(String.valueOf(noOfType)); 
     txtNoOfType.setTextSize(16);    
     txtNoOfType.setPadding(0, 20, 20, 20); 
     txtNoOfType.setTextColor(myContext.getResources().getColor(R.color.BlackColor)); 
     layout.addView(txtNoOfType,noOfTypesLp); 

     return layout; 
    } 
    @Override 
    public boolean hasStableIds() { 
     return false; 
    }  
    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 
} 

}

ответ

1

В вашем OnItemClickListener:

Fragment fragment = new Fragment(); 
Bundle bundle = new Bundle();         
bundle.putString("MainCategoryName", mainCategory.masterinfo.get(position-1).maincatname); 
fragment.setArguments(bundle); 

Это не было бы правильным подходом. Вам нужно перевести данные во второй фрагмент, а не в «новый фрагмент».

Я думаю, вы можете сделать это следующим образом: 1. передавать данные в ServiceActivity; 2. Заменить 1-й фрагмент вторым фрагментом и setArguments() для передачи данных во второй фрагмент.

код:
1. создать функцию обратного вызова, как это:

public interface MainfragmentCallBack{ 
    public void showData(String data, int id); 
} 

2. ServiceActivity реализует MainfragmentCallBack и более езды showData();

3, showData() в ServiceActivity:

@Override 
public void showData(String data, int id){ 
    //use FragmentTransaction to replace 1st fragment with 2nd fragment 
    //use setArgument to transfer data 
    // I do not konw your layout of ServiceActivity,so you can implement it on yourself 
} 

4, экземпляр MainFragmentCallBack в 1-й фрагмент, использовать его в OnItemClickListener

предложение:
Показать данные в другой деятельности вместо ServiceActivity является лучшим выбор в этом случае.

+0

Да, это имеет смысл, но можете ли вы отправить этот метод здесь. – Sudhansu

+0

@Sudhansu Sekhar Я добавляю код выше. – zhenghuiyan

+0

Когда я отправляю в другое действие с использованием намерения, я получил ошибку на этой строке..getActivity(). GetApplication(). StartActivity (subCategoryIntent); в 1-м фрагменте – Sudhansu