如何用另一个片段的gridview点击替换旧片段和新片段

时间:2014-08-29 07:25:56

标签: android gridview android-fragments

我有一个主Activity.inside主要活动我有gridview的片段,我想通过gridview点击更改我的片段。

任何帮助......

这是我的mainActivity类

    public class MainActivity extends Activity implements Fragment_name_list.Communicator      {
      Fragment_name_list f1;
      Fragment_tests f2;
      FragmentManager manager;

      Fragment_addStudentDetails f3;

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

    manager=getFragmentManager();
    f1 = (Fragment_name_list) manager.findFragmentById(R.id.fragment);
    f1.setCommunicator(this);
    //ArrayAdapter<String> adapter= new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,result);

}

@Override
public void respond(int index) {
    f2 = (Fragment_tests) manager.findFragmentById(R.id.fragment2);
    f3 = (Fragment_addStudentDetails) manager.findFragmentById(R.id.fragment3);
    switch (index){
        case 1:
            ///Intent i = new Intent(this,Group_AddStudent_details.class);
            ///i.putExtra("index", index);
            //startActivity(i);
            f2.changeData(index);
            break;
        case 2:

            break;
        case 3:

            break;
        case 4:
            break;
    }

}

}

这是我的Fragment测试类

       public class Fragment_tests extends Fragment {
TextView text;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_test,container,false);
    text = (TextView) view.findViewById(R.id.textViewp);
    return view;
}

public void changeData(int index){
    String[] result= getResources().getStringArray(R.array.result);
    text.setText(result[index]);
}

}

这是我的Fragmnet添加学生班

     public class Fragment_addStudentDetails extends Fragment {
TextView text;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_add_student_details,container,false);
    text = (TextView) view.findViewById(R.id.textViewp);
    return view;
}

}

我想用fragmnet_add_student_details替换我的fragmnet_test。 plzz帮助

1 个答案:

答案 0 :(得分:1)

首先,不要将Fragments放在主Activity的布局xml中。我无法从你的代码中看到你是否确实这样做了,但我怀疑你正在做的是因为你要保留的字段是指你正在使用的两个片段。

你想要做的是让你的Fragment以编程方式进行某种类型的ViewGroup(FrameLayout将起作用)。在FragmentTransaction上使用replace将现有的Fragment替换为另一个。

getFragmentManager().beginTransaction() //
  .replace(R.id.fragmentContainer, new BlahFragment()) //
  .commit();

另外,不要在Fragments上使用变异方法。如果数据发生变化,只需将Fragment与前面提到的代码片段交换掉,然后通过记录的模式为自己创建一个新片段:

BlahFragment.newInstance(String[] data);

我从文档中提取了这个例子:

public static class DetailsFragment extends Fragment {
    /**
     * Create a new instance of DetailsFragment, initialized to
     * show the text at 'index'.
     */
    public static DetailsFragment newInstance(int index) {
        DetailsFragment f = new DetailsFragment();

        // Supply index input as an argument.
        Bundle args = new Bundle();
        args.putInt("index", index);
        f.setArguments(args);

        return f;
    }
}