0

我正在尝试将带有数据的意图从 Activity A 传递到 FragmentActivity B 到 Fragment B。来自 Activity A 的按钮启动 FragmentActivity B。“年份”字符串设置了一个过滤器,我使用该过滤器查询远程服务器上的 mysql 数据库。下面的代码有效,但只有一半的时间。

我不知道是什么原因导致它只过滤了一些时间,而在其他时候它只是返回了未过滤的整个表。我猜它必须与我在片段中使用的意图相关,因为过滤器在没有片段的应用程序版本中正常工作。我将意图从 Activity A 发送到 FragmentActivity B 到 Fragment B 的方式似乎也效率低下。我该如何解决这个问题?

活动一:

Button button1 = (Button)findViewById(R.id.button1);

    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
           Intent intent = new Intent();
            intent.setClass(FindMovie.this, ShowMovies.class);

            intent.putExtra("year", year1);

            startActivity(intent);
   }
    });

片段活动 B:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show_movies);
    if (getSupportFragmentManager().findFragmentByTag(TAG) == null) {
        final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(android.R.id.content, new ImageGridFragment(), TAG);
        ft.commit();
    }



    Intent i = getIntent();

    year = i.getStringExtra("year");

              //resend through another intent to the fragment B
    Intent intent = new Intent(getApplicationContext(), ImageGridFragment.class);


        intent.putExtra("year", year);
   }

片段 B:

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


    final View v = inflater.inflate(R.layout.image_grid_fragment, container, false);


    Bundle extras = getActivity().getIntent().getExtras();

    year = extras.getString("year");

 return v;
  }
4

1 回答 1

3

我认为这是一个线程计时问题,您的 FragmentActivityB 正在创建片段,该片段被发送到一个线程(我认为),然后您从原始线程添加新值,有时第二个线程足够快执行FragmentBonCreateView在获得新值之前。您可以做的是'year'在 FragmentTransaction 期间添加 的值。

@Override
protected void onCreate(Bundle savedInstanceState) {
    // Create a new fragment and bundle
    Fragment fragment = new ImageGridFragment();
    Bundle bundle = new Bundle();

    // Put variables in bundle and add to fragment
    bundle.putString("year", getIntent().getStringExtra("year"));
    fragment.setArguments(bundle);

    // Insert the fragment
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager
            .beginTransaction()
            .add(android.R.id.content, fragment)
            .commit();
}

在 FragmentB 中得到'year'这样的:

year = getArguments().getString("year");

我认为这会解决问题,让我知道会发生什么,

干杯。

于 2013-06-21T02:00:15.140 回答