2017-07-28 5 views
0

Cette question est quelque chose de sérieux pour moi, j'ai besoin de quelqu'un m'aider à ce sujet. En fait, je crée une application de flux RSS en combinant le tiroir de navigation et l'activité des onglets de pager de vue. je veux passer une valeur de chaîne d'un fragment à l'autre fragment. Voici la chose. Il fonctionnait correctement quand il était avec l'activité de tiroir de navigation, mais après la combinaison avec view-pager, String ne passe pas à l'autre fragment par bundle, je ne peux pas trouver l'erreur parce qu'il ne montre aucune erreur,Impossible de passer la valeur de chaîne à travers Bundle

Ceci est de je passe chaîne

public class RssFragment extends Fragment implements OnItemClickListener { 


private ProgressBar progressBar; 
private ListView listView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_first, container, false); 
    progressBar = (ProgressBar) view.findViewById(R.id.progressBar); 
    listView = (ListView) view.findViewById(R.id.listView); 
    listView.setOnItemClickListener(this); 
    return view; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    startService(); 
} 

private void startService() { 
    Intent intent = new Intent(getActivity(), RssService.class); 
    getActivity().startService(intent); 
} 

/** 
* Once the {@link RssService} finishes its task, the result is sent to this BroadcastReceiver 
*/ 
private BroadcastReceiver resultReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     progressBar.setVisibility(View.GONE); 
     List<RssItem> items = (List<RssItem>) intent.getSerializableExtra(RssService.ITEMS); 
     if (items != null) { 
      RssAdapter adapter = new RssAdapter(getActivity(), items); 
      listView.setAdapter(adapter); 
     } else { 
      Toast.makeText(getActivity(), "An error occurred while downloading the rss feed.", 
        Toast.LENGTH_LONG).show(); 
     } 
    } 
}; 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    RssAdapter adapter = (RssAdapter) parent.getAdapter(); 
    RssItem item = (RssItem) adapter.getItem(position); 


    Uri uri = Uri.parse(item.getDescription()); 
    String string; 
    string=uri.toString(); 



    result Des_1=new result(); 
    FragmentManager fragmentManager1 =getActivity().getSupportFragmentManager(); 
    fragmentManager1.beginTransaction().replace(R.id.content_main_layout_frame,Des_1).addToBackStack("fragBack").commit(); 



    result ldf = new result(); 
    Bundle args = new Bundle(); 
    args.putString("YourKey", string); 
    ldf.setArguments(args); 
    getFragmentManager().beginTransaction().add(R.id.content_main_layout_frame, ldf).commit(); 

} 

@Override 
public void onStart() { 
    super.onStart(); 
    IntentFilter intentFilter = new IntentFilter(RssService.ACTION_RSS_PARSED); 
    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(resultReceiver, intentFilter); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(resultReceiver); 
} 
} 

Voici comment je reçois la chaîne

public class result extends Fragment { 


public result() { 


    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootview=inflater.inflate(R.layout.fragment_result,container,false); 

    Bundle bundle = getArguments(); 

    TextView textView=(TextView)rootview.findViewById(R.id.distext); 





    if(bundle != null) { 

     String value = bundle.getString("YourKey"); 

     textView.setText(value); 

     // Toast.makeText(getActivity(), value, 
      // Toast.LENGTH_LONG).show(); 

    } 





    return rootview; 
} 

} 

Je plaire à quelqu'un de le comprendre. Je le répète, il travaillait, mais maintenant ce ne est pas

Il est un autre fragment

public class datafragment extends Fragment { 
View view; 
ViewPager viewPager; 
TabLayout tabLayout; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    view= inflater.inflate(R.layout.sample,container,false); 


    viewPager = (ViewPager) view.findViewById(R.id.viewpager); 
    viewPager.setAdapter(new sliderAdapter(getChildFragmentManager())); 
    tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs); 
    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      tabLayout.setupWithViewPager(viewPager); 
     } 
    }); 

    return view; 

} 




private class sliderAdapter extends FragmentPagerAdapter{ 

    final String tabs[]={"tab1", "tab2","tab3"}; 
    public sliderAdapter(FragmentManager fm) { 
     super(fm); 
    } 


    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = null; 
     switch (position){ 
      case 0: 
       fragment = new RssFragment(); 
       break; 
      case 1: 
       fragment = new RssFragment(); 
       break; 
      case 2: 
       fragment = new RssFragment(); 
       break; 
     } 
     return fragment; 
    } 


    @Override 
    public int getCount() { 


     return 3; 
    } 
    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabs[position]; 
    } 
} 




} 
+0

tout d'abord changer le nom de votre objet String de chaîne à rien d'autre s'il vous plaît –

+0

changé ........ ................. –

Répondre

1

Essayez le en dessous d'un,

ldf = new result(); 
Bundle bundle = new Bundle(); 
FragmentTransaction fragmentTransaction = 
getActivity().getSupportFragmentManager().beginTransaction(); 
bundle.putString("key","value"); 
ldf.setArguments(bundle); 
fragmentTransaction.addToBackStack("fragBack"); 
fragmentTransaction.replace(R.id.content_main_layout_frame, ldf); 
fragmentTransaction.commit(); 
+0

merci beaucoup ......... je ne sais pas comment vous remercier –

+0

vous êtes les bienvenus! – Chithra

1

Retirez à la fois la transaction et ajoutez le code ci-dessous à la place,

ldf = new result(); 
Bundle bundle = new Bundle(); 
FragmentTransaction fragmentTransaction = 
getActivity().getSupportFragmentManager().beginTransaction(); 
bundle.putString("key","value"); 
ldf.setArguments(bundle); 
fragmentTransaction.addToBackStack("fragBack"); 
fragmentTransaction.add(R.id.content_main_layout_frame, ldf); 
fragmentTransaction.commit(); 

Laissez-moi savoir si ça aide!

+0

pouvez-vous me dire pourquoi ça s'est passé? –

+0

car il y avait deux transactions séquentiellement, la première transaction c'est-à-dire, celle avec des paramètres de bundle de sortie est exécutée et a ouvert le fragment. Le code après cela ne fonctionne pas. – Chithra

+0

Mais pourquoi cela fonctionnait avant –

1

Essayez cette

public class result extends Fragment { 


public result() { 


// Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
View rootview=inflater.inflate(R.layout.fragment_result,container,false); 

TextView textView=(TextView)rootview.findViewById(R.id.distext); 


if(savedInstanceState!= null) { 

    String value = savedInstanceState.getString("YourKey"); 

    textView.setText(value); 

    // Toast.makeText(getActivity(), value, 
     // Toast.LENGTH_LONG).show(); 

} 

return rootview; 
} 

}