2013-07-15 14 views
1

我在片段類中創建了一個類似於偵聽器的接口,以將字符串從Fragment發送到Activity。向相反方向發送字符串的最佳方式是什麼?從活動到片段?所以現在在片段中有一個接口,所以我必須在Activity中創建另一個接口來向另一個方向發送字符串,或者有更好的方法嗎?如何使用Activity和Fragment之間的接口在兩個方向上發送數據

片段類:

public class FragmentHeadless extends Activity implements FragmentHeadlessFragment.OnTimeRequestedListener { 

FragmentTransaction transaction; 
Button button; 
TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_headless); 

    button = (Button) findViewById(R.id.button1); 
    textView = (TextView) findViewById(R.id.textView1); 


    FragmentManager fragmentManager = getFragmentManager(); 
    transaction = fragmentManager.beginTransaction(); 

     transaction.add(new FragmentHeadlessFragment(), "processorFragment"); 
     transaction.commit(); 

} 

@Override 
public void passString(String stringFromFragment) { 
    textView.setText(stringFromFragment); 
    Toast.makeText(this, "String passed from fragment " + stringFromFragment, Toast.LENGTH_SHORT).show(); 

} 

} 

活動類

public class FragmentHeadlessFragment extends Fragment { 

private OnTimeRequestedListener listener; 
String tempString = ""; 
Activity activity; 
Handler handler; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    handler = new Handler(); 

    new Thread(){ 

     public void run() { 

     SystemClock.sleep(3000); 

     handler.post(new Runnable() { 
      @Override 
      public void run() { 

       // pass string to activity 
       passData("test string from fragment with 3 second delay"); 


      } 
     }); 

     } // end run 

    }.start(); 

} // end onCreate 

@Override 
    public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    if (activity instanceof OnTimeRequestedListener) { 
     listener = (OnTimeRequestedListener) activity; 
    } else { 
     throw new ClassCastException(activity.toString() 
      + " must implemenet OnTimeRequestedListener"); 
    } 
    } 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    activity = getActivity(); 
    setRetainInstance(true); 


} 

public interface OnTimeRequestedListener { 
     public void passString(String timeNumberString); 

    } 

public void passData(String data) { 
     listener.passString(data); 
    } 



} 

回答

2

,因爲你有一個實例的片段,你可以叫你通過activitiy需要的功能:

代替:

transaction.add(new FragmentHeadlessFragment(), "processorFragment"); 

使用:

private FragmentHeadlessFragment mFragment; 
... 
mFragment=new FragmentHeadlessFragment(); 
transaction.add(mFragment, "processorFragment"); 

,當你願意的話,叫:

mFragment.foo(myInt,myString,...) ; 

順便說一句,你爲什麼有一個字段進行交易?

+0

我不知道爲什麼我有一個交易領域。我想最好不要在一個領域有這樣的情況? – Kevik

+0

好,如果它不起任何作用,它應該是一個簡單的變量... –

+0

感謝您的幫助,我試過這段代碼,它工作的很好,現在我知道另一種方式發送片段和活動之間的信息 – Kevik

相關問題