Android 当在第一个片段上单击任何Gridview视图项时,如何在同一活动中加载另一个片段

Android 当在第一个片段上单击任何Gridview视图项时,如何在同一活动中加载另一个片段,android,android-fragments,Android,Android Fragments,我正在开发一个android应用程序。我正在活动的片段中加载一些视图。第一个片段中有Gridview/ListView。当单击Listview/Gridview的任何项目时,我想在同一活动中加载另一个片段,而不重新启动活动 我如何才能做到这一点?片段代码: gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick

我正在开发一个android应用程序。我正在活动的片段中加载一些视图。第一个片段中有Gridview/ListView。当单击Listview/Gridview的任何项目时,我想在同一活动中加载另一个片段,而不重新启动活动

我如何才能做到这一点?

片段代码:

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, final View view, final int position, long id) {



                        YourFragment yf= new YourFragment ();



                      ((HomeActivity) mActivity).replceFrament(groupControlFragment);




        }
    });
片段代码:

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, final View view, final int position, long id) {



                        YourFragment yf= new YourFragment ();



                      ((HomeActivity) mActivity).replceFrament(groupControlFragment);




        }
    });

这里有一个例子。这不是一个确切的答案,只是一个提示

片段类可能如下所示:

public class FragmentA extends ListFragment {
    OnArticleSelectedListener mListener;

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

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnArticleSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
        }
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // Append the clicked item's row ID with the content provider Uri
        Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);
        // Send the event and Uri to the host activity
        mListener.onArticleSelected(position);
    }

}
活动类别如下所示:

public static class DetailsActivity extends Activity implements FragmentA.OnArticleSelectedListener{

    @Override
    public void onArticleSelected(int position){
        // your implementation ...
    }
}

这里有一个例子。这不是一个确切的答案,只是一个提示

片段类可能如下所示:

public class FragmentA extends ListFragment {
    OnArticleSelectedListener mListener;

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

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnArticleSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
        }
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // Append the clicked item's row ID with the content provider Uri
        Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);
        // Send the event and Uri to the host activity
        mListener.onArticleSelected(position);
    }

}
活动类别如下所示:

public static class DetailsActivity extends Activity implements FragmentA.OnArticleSelectedListener{

    @Override
    public void onArticleSelected(int position){
        // your implementation ...
    }
}

在包含listview/gridview的片段中

Fragment[] fragment=new Fragment{new MyFragment1(), new MyFragment2(), new MyFragment3()};

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){

       View view=inflater.inflate(R.layout.mylayout, container, false);
       ListView listView=(ListView)view.findViewById(R.id.list_id);

       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    replaceFragment(fragment[i]);
                }
            });
      return view;
}

public void replaceFragment(Fragment fragment){
        FragmentManager fragmentManager=getFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.containerLayout,fragment);
        fragmentTransaction.addToBackStack(null);           //Optional
        fragmentTransaction.commit();
}
Fragment[]Fragment=new Fragment{new MyFragment1(),new MyFragment2(),new MyFragment3();
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.mylayout,container,false);
ListView ListView=(ListView)view.findViewById(R.id.list\u id);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
替换片段(片段[i]);
}
});
返回视图;
}
公共无效替换片段(片段片段){
FragmentManager FragmentManager=getFragmentManager();
FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.containerLayout,fragment);
fragmentTransaction.addToBackStack(null);//可选
fragmentTransaction.commit();
}

在包含listview/gridview的片段中

Fragment[] fragment=new Fragment{new MyFragment1(), new MyFragment2(), new MyFragment3()};

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){

       View view=inflater.inflate(R.layout.mylayout, container, false);
       ListView listView=(ListView)view.findViewById(R.id.list_id);

       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    replaceFragment(fragment[i]);
                }
            });
      return view;
}

public void replaceFragment(Fragment fragment){
        FragmentManager fragmentManager=getFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.containerLayout,fragment);
        fragmentTransaction.addToBackStack(null);           //Optional
        fragmentTransaction.commit();
}
Fragment[]Fragment=new Fragment{new MyFragment1(),new MyFragment2(),new MyFragment3();
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.mylayout,container,false);
ListView ListView=(ListView)view.findViewById(R.id.list\u id);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
替换片段(片段[i]);
}
});
返回视图;
}
公共无效替换片段(片段片段){
FragmentManager FragmentManager=getFragmentManager();
FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.containerLayout,fragment);
fragmentTransaction.addToBackStack(null);//可选
fragmentTransaction.commit();
}

您是否尝试过使用
回调
方法?我认为回调是正确的方法。你可以在这里发布一个例子,这将是非常有帮助的。谢谢您尝试过使用
回调
方法吗?我认为回调是正确的方法。你可以在这里发布一个例子,这将是非常有帮助的。非常感谢你的这个主意,它对我起了作用。谢谢。我还有一个问题,在单击任何Gridview项时,我通过替换第一个片段来加载同一活动中的发送片段,但是当我按下活动的后退按钮时,第一个片段应该显示在那里,我该怎么做呢?首先,您必须通过
addToBackStack
将第一个片段放入堆栈中。要弹出堆叠的片段,请使用
getFragmentManager().popBackStack()更多细节,请按照的第二个答案,或者非常感谢你的这个想法,它对我有用。谢谢。我还有一个问题,在单击任何Gridview项时,我通过替换第一个片段来加载同一活动中的发送片段,但是当我按下活动的后退按钮时,第一个片段应该显示在那里,我该怎么做呢?首先,您必须通过
addToBackStack
将第一个片段放入堆栈中。要弹出堆叠的片段,请使用
getFragmentManager().popBackStack()有关更多详细信息,请按照或的第二个答案进行操作