2017-07-28 2 views
0

zu übergeben Diese Frage ist etwas ernstes für mich, ich brauche jemanden, der mir diesbezüglich hilft. Eigentlich erstelle ich eine RSS-Feed-App, indem ich Navigationsschublade und Pager-Tabbed-Aktivität zusammenfasse. Ich möchte einen String-Wert von einem Fragment an ein anderes Fragment übergeben. hier ist das Ding. Es funktionierte ordnungsgemäß, als es mit der Navigationsschublade Aktivität war, aber nach der Kombination mit View-Pager, String nicht zu anderen Fragment durch Bundle übergeben, kann ich den Fehler nicht finden, weil es keinen Fehler zeigt,Nicht in der Lage, String-Wert durch das Bündel

Dies ist von i-String

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); 
} 
} 

Dies ist, wie ich die Zeichenfolge erhalte

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; 
} 

} 

ich jemanden gefällig es herauszufinden bin vorbei. Ich wiederhole es funktionierte, aber jetzt ist es nicht

Es ist ein weiteres 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

Zunächst einmal den Namen des String-Objekt aus der Zeichenfolge auf etwas anderes ändern –

+0

geändert bitte ........ ................. –

Antwort

1

man die folgenden Versuchen,

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

Vielen Dank ......... Ich weiß nicht, wie ich Ihnen danken kann –

+0

Sie sind herzlich willkommen! – Chithra

1

entfernen sowohl die Transaktion und fügen Sie den folgenden Code stattdessen

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(); 

Lassen Sie mich wissen, ob das hilft!

+0

Kannst du mir sagen, warum es passiert ist? –

+0

Da es zwei Transaktionen sequentiell gab, wird die erste Transaktion, d. H. Diejenige mit out bundle params, ausgeführt und das Fragment geöffnet. Der Code danach ist nicht wirksam. – Chithra

+0

Aber warum war es vor –

1

Versuchen Sie, diese

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; 
} 

}