2014-02-19 15 views
0

我有一個問題與片段之間comuunicating之間的動態剪輯,我mannaged使用接口系統來通報如果片段都可查看,但是當我查看它們時,我可以sepretly我可以因爲他們還沒有標籤,所以沒有用他們的行爲,任何想法?片段之間的通信時,只有其中一個是可見的

主activty

公共類MainActivity延伸FragmentActivity實現OnClickListener,通訊這裏{

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

if (isSingleFragment()) { 

     Button btn_color = (Button) findViewById(R.id.button_color); 
     Button btn_text = (Button) findViewById(R.id.button_text); 
     Button btn_list = (Button) findViewById(R.id.button_list); 
     btn_color.setOnClickListener(this); 
     btn_list.setOnClickListener(this); 
     btn_text.setOnClickListener(this); 

     singleFragActions(); 

    } else { 

     doubleFragActions(); 
    } 


// some more stuff happens 

@Override 
public void apply(String data) { 

    Log.d("data", data+""); 
    FragmentManager fm = getSupportFragmentManager(); 
    Frag_list frag_list = (Frag_list) fm.findFragmentByTag("list"); 
//i cannot use id because the fragment in 
//MainActivity are in a layout and are enterd dynamicaly 

    frag_list.addItem(data); 

} 

三個片段,當在小屏幕上,在被示出並在上面改變他們三個扣arrounf,如果上平板,所有三個都持續顯示,這是接口

public interface Communicator { 

public void apply(String data); 

} 

frag_text(第一片段)

public class Frag_text extends Fragment implements OnClickListener{ 


Communicator comm; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // stuff 
return view; 

} 


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

    comm = (Communicator) getActivity(); 
} 
@Override 
public void onClick(View v) { 


    EditText input = (EditText) getView().findViewById(R.id.frag_text_edit); 
    TextView output = (TextView) getView().findViewById(R.id.frag_text_show); 

    String text_get = input.getText().toString(); 
    output.setText("hello "+text_get+" how are you today?"); 

    comm.apply(text_get); 
} 
} 

frag_list(其它片段)

public class Frag_list extends Fragment{ 



ArrayList<String> list; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.frag_list, container, false); 

list = new ArrayList<String>(); 



ArrayAdapter<String> adapter = 
    new ArrayAdapter<String>(getActivity(), 
     android.R.layout.simple_list_item_1, list); 

ListView lv = (ListView) view.findViewById(R.id.list_frag); 
lv.setAdapter(adapter); 

return view; 

} 

public void addItem(String data){ 

    list.add(data); 
} 
} 

如何我訪問其他片段,如果它沒有一個標籤嗎?

+0

您的問題越來越片段類實例在活動? – Raghunandan

+0

@Raghunandan是的,因爲它不在屏幕上,我還沒有給它一個TAG,它不知道它是插入在一個框架佈局 –

+0

你不能使用'Frag_list frag = new Frag_list()'檢查它的附加,然後調用所需的方法 – Raghunandan

回答

1

如果你碰巧知道你要調用的是什麼片段,那麼在這種情況下,FragmentActivity可以充當中介,因爲它只是一個「主機」。您已擁有此Communicator界面。把它傳達給定的片段:

public interface Communicator { 
    public void apply(String data, String tag); 
} 

和重載:

@Override 
public void apply(String data, String tag) { 
    FragmentManager fm = getSupportFragmentManager(); 
    Frag_list frag_list = (Frag_list) fm.findFragmentByTag(tag); 
    //Fallback plan in case the fragment has not been created. 
    if(frag_list == null) { 
     frag_list = new Frag_list(); 
     //Include the fragment for future reference. 
     //This fragment has no view 
     fm.beginTransaction().add(frag_list, tag); 
    } 
    frag_list.addItem(data); 
} 

並修改片段總是有可用的列表:

public class Frag_list extends Fragment{ 

ArrayList<String> list = new ArrayList<String>(); 
//... 

    public void addItem(String data){ 
     //Add check to avoid problems 
     if(list != null) { 
      list.add(data); 
     } 
    } 
}