2013-06-21 31 views
0

我试图将数据从活动A到FragmentActivity B的意图传递给片段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; 
    } 

回答

3

我觉得这是一个线程时机的问题,您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");

我认为这将解决这个问题,让我知道什么,虽然发生了,

干杯。

+0

多么美妙的答案!非常感谢。它解决了这个问题。 “线程计时问题”是问题所在,我实际上只需将异步任务移动到Bundle extras = getActivity()。getIntent()。getExtras(); \t \t \t \t year = extras.getString(“year”); – Jerome

+0

不客气:D – LuckyMe

+0

LuckyMe,这真的有效。我有一个小问题,我的片段处于可选标签视图,所需片段位于第5个选项卡中。当我使用这个代码时,它直接嵌入第5个屏幕。我如何改变它 –

相关问题