我试图通过从活动A到FragmentActivity B到Fragment B的数据意图。从活动A开始的按钮FragmentActivity B."年"字符串设置了一个过滤器,我在远程服务器上查询mysql数据库。下面的代码工作,但只有一半的时间。
我不知道是什么原因导致它过滤只是一些时间,在其他时间它只是返回整个表未过滤。我猜它必须与我在片段中使用的意图有关,因为过滤器在没有片段的应用程序版本中没有问题。它似乎也效率低下的方式,我发送意图从活动A FragmentActivity B片段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);
}
});
FragmentActivity 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;
}
我认为这是一个线程计时问题,你的FragmentActivityB正在创建片段,它被发送到一个线程(我想),然后你从原始线程添加新值,有时第二个线程足够快,可以在获得新值之前执行FragmentB onCreateView
。您可以做的是在FragmentTransaction期间添加'year'
的值。
@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");
我认为这将解决问题,让我知道发生了什么,
欢呼。