【问题标题】:Not able to pass String value through Bundle无法通过 Bundle 传递字符串值
【发布时间】:2017-07-28 09:50:41
【问题描述】:

这个问题对我来说很严重,我需要有人帮助我解决这个问题。实际上,我正在通过组合导航抽屉和查看寻呼机选项卡式活动来创建一个 RSS 提要应用程序。我想将一个字符串值从一个片段传递到另一个片段。事情就是这样。它在使用导航抽屉活动时工作正常,但在与 view-pager 结合后,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);
}
}

这就是我接收字符串的方式

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

}

我很高兴有人能解决这个问题。我再说一遍它可以工作,但现在不行了

这是另一个片段

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




}

【问题讨论】:

  • 首先请将您的 String 对象的名称从 string 更改为其他任何名称
  • 已更改............

标签: android string android-fragments bundle


【解决方案1】:

试试下面这个,

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

【讨论】:

    【解决方案2】:

    删除这两个事务并添加以下代码,

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

    如果有帮助,请告诉我!

    【讨论】:

    • 你能告诉我为什么会这样吗?
    • 由于顺序有两个事务,第一个事务,即没有捆绑参数的事务被执行并打开片段。之后的代码无效。
    【解决方案3】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      相关资源
      最近更新 更多