Android 当在第一个片段上单击任何Gridview视图项时,如何在同一活动中加载另一个片段
我正在开发一个android应用程序。我正在活动的片段中加载一些视图。第一个片段中有Gridview/ListView。当单击Listview/Gridview的任何项目时,我想在同一活动中加载另一个片段,而不重新启动活动 我如何才能做到这一点?片段代码:Android 当在第一个片段上单击任何Gridview视图项时,如何在同一活动中加载另一个片段,android,android-fragments,Android,Android Fragments,我正在开发一个android应用程序。我正在活动的片段中加载一些视图。第一个片段中有Gridview/ListView。当单击Listview/Gridview的任何项目时,我想在同一活动中加载另一个片段,而不重新启动活动 我如何才能做到这一点?片段代码: gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick
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()代码>有关更多详细信息,请按照或的第二个答案进行操作