0

希望你一切都好,恭喜你的工作!场景:我有 3 个片段文件,Pagegauchefragment、PageMilieufragment 和 PageDroiteFragment,由 2 个文件 FragmentsSliderActivity 和 MyPagerAdapter 管理。第一个和第二个是带有 EditText 的数据字段,由用户填写。最后一个是保存数据用户文件的 ListView。从列表视图(最后一个片段)中,用户以 3 种可能性单击文件:1. 导入文件 / 2. 删除文件 / 3. 取消(我使用操作栏过程来保存数据)。现在的问题:我无法将我的数据刷新(使用 setText)传递给其他片段。日志:标签:IIputConnectionWrapper / 文本:非活动 InputConnection 上的 getSelectedText,非活动 InputConnection 上的 setComposingText。

  View W =inflater.inflate(R.layout.page_droite_layout,container, false);
     this.mListView = (ListView) W.findViewById(R.id.ListView01);
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, tabRevues);
     this.mListView.setAdapter(adapter);

     this.mListView.setOnItemClickListener(new OnItemClickListener() {           

        @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
             View WW =inflater.inflate(R.layout.page_gauche_layout,container, false);
             file_name = (EditText) WW.findViewById(R.id.label_LiquidBase);


             //int item = position;
             item_name = ((TextView)view).getText().toString();
             AlertDialog.Builder ad = new AlertDialog.Builder(getActivity());               

             ad.setTitle("Selection Recettes : " + item_name);
             ad.setMessage("Que souhaitez-vous faire ?");

             ad.setPositiveButton("Importer", 
                     new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int id) {                           
                            try {

在这里,我将文本传递给 setText(例如):

file_name.setText("blahblah");

我想我在一个 Void 方法中,但我不知道如何传递变量......任何帮助都将不胜感激!克里斯托弗

4

1 回答 1

2

从不建议在 Fragment 之间直接传递数据。相反,将数据从 Fragment X 传递到 FragmentsSliderActivity,FragmentsSliderActivity 会将这些数据传递到 Fragment Y。您可以通过在 Fragment 类中定义的接口来执行此操作,并实例化在 onAttach() 中定义的回调。

有关如何在此处执行此操作的更多信息 与其他片段的通信

快速示例,考虑片段 A 和片段 B。片段 A 是一个列表片段,无论何时选择一个项目,它都会改变片段 B 中显示的内容。很简单,对吧?

首先,这样定义片段 A。

 public class FragmentA extends ListFragment{

   //onCreateView blah blah blah

}

这是片段 B

public class FragmentB extends Fragment{

 //onCreateView blah blah blah

}

这是我的 FragmentActivity 将管理它们

public class MainActivity extends FragmentActivity{

//onCreate 
//set up your fragments

}

大概您已经有了类似的东西,现在这里是您将如何更改 FragmentA(我们需要从中获取一些数据的列表片段)。

    public class FragmentA extends ListFragment implements onListItemSelectedListener, onItemClickListener{

OnListItemSelectedListener mListener;

   //onCreateView blah blah blah



 // Container Activity must implement this interface
    public interface OnListItemSelectedListener {
    public void onListItemSelected(int position);
}


}


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

    // This makes sure that the container activity has implemented
    // the callback interface. If not, it throws an exception
    try {
        mListener = (OnListItemSelectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnListItemSelectedListener");
    }
}


  @Override 
 public void onItemClick(AdapterView<?> parent, View view, int position, long id){


 //Here's where you would get the position of the item selected in the list, and  pass    that position(and whatever other data you need to) up to the activity 
//by way of the interface you defined in onAttach

  mListener.onListItemSelected(position);


}

这里最重要的考虑是你的父Activity实现了这个接口,否则你会得到一个异常。如果成功实施,每次选择列表片段中的项目时,都会通知您的 Activity 其位置。显然你可以用任意数量或类型的参数来改变你的接口,在这个例子中我们只是传入我们的整数位置。希望这能澄清一点,祝你好运。

于 2013-02-06T23:13:32.077 回答