如何在 Android 中单击 ImageView 时从一个片段移动到另一个片段?
Posted
技术标签:
【中文标题】如何在 Android 中单击 ImageView 时从一个片段移动到另一个片段?【英文标题】:How to move from one fragment to another fragment on click of an ImageView in Android? 【发布时间】:2014-06-06 09:20:34 【问题描述】:我有一个 ImageView。我想通过单击 Imageview 从一个片段移动到另一个片段,就像我们可以使用从一个活动移动到另一个活动一样
Intent i=new Intent(MainActivity.this,SecondActivity.class);
startActivity(i);
我该怎么做?谁能一步步给我解释一下?
我的代码如下:
mycontacts.class
public class mycontacts extends Fragment
public mycontacts()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
final View v = super.getView(position, convertView, parent);
ImageView purple=(ImageView)v.findViewById(R.id.imageView1);
purple.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
//how to go to tasks fragment from here???
);
return view;
tasks.class
public class tasks extends Fragment
public tasks()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View view = inflater.inflate(R.layout.fragment_layout_one, container,
false);
return view;
【问题讨论】:
【参考方案1】:purple.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Fragment fragment = new tasks();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
);
你写了上面的代码……我们用我们的片段替换 R.id.content_frame。
【讨论】:
片段片段=新任务();我收到错误cannot convert fragments to task
。怎么办?
tasks extends fragment...所以任务只是片段的子类,并确保您的导入语句 import android.support.v4.app.Fragment;导入 android.support.v4.app.FragmentManager;导入 android.support.v4.app.FragmentTransaction;如果仍然有错误,则发布您的日志消息
任务片段的布局 ID 为 r.id.task
。我当前的片段有布局 id r.id.contact
。那么我应该写什么来代替r.id.content_frame
?
好的..你现在在 MyContacts 片段中......你如何开始......?检查..你可能会通过替换视图从某个地方调用 mycontacts 片段...... .所以在这里你也必须提到同样的观点..希望这对你有帮助。
哦,我搜索了多长时间!谢谢!不过,起初,变量 tasks (?!) 的名称令人困惑。然后他随口说他叫他的碎片任务! =)【参考方案2】:
当你在一个活动中并且需要去下面的片段使用时
getFragmentManager().beginTransaction().replace(R.id.*TO_BE_REPLACED_LAYOUT_ID*, new tasks()).commit();
但是当你在一个片段内并且需要去一个片段时,那么只需在前面添加一个getActivity().
,这样它就会变成
getActivity().getFragmentManager().beginTransaction().replace(R.id.*TO_BE_REPLACED_LAYOUT_ID*, new tasks()).commit();
就这么简单。
*TO_BE_REPLACED_LAYOUT_ID*
可以是整个活动页面,也可以是其中的一部分,只要确保在要替换的布局中放置一个 id 即可。一般的做法是将可替换布局放在 FrameLayout
中。
【讨论】:
【参考方案3】:@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View v = inflater.inflate(R.layout.fragment_profile, container, false);
notification = (ImageView)v.findViewById(R.id.notification);
notification.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
FragmentTransaction fr = getFragmentManager().beginTransaction();
fr.replace(R.id.container,new NotificationFragment());
fr.commit();
);
return v;
【讨论】:
【参考方案4】:将此代码添加到您要单击并加载片段的位置。
Fragment fragment = new yourfragment();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
【讨论】:
【参考方案5】:在你的 onClickListener.onClick 中,放
getFragmentManager().beginTransaction().replace(R.id.container, new tasks()).commit();
换句话说,在你的 mycontacts.class 中
public class mycontacts extends Fragment
public mycontacts()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
final View v = super.getView(position, convertView, parent);
ImageView purple = (ImageView) v.findViewById(R.id.imageView1);
purple.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
getFragmentManager()
.beginTransaction()
.replace(R.id.container, new tasks())
.commit();
);
return view;
现在,请记住 R.id.container
是调用片段的活动的容器(FrameLayout 或其他布局)
【讨论】:
【参考方案6】:您可以使用 FragmentManager 事务移动到另一个片段。片段不能称为活动,。碎片存在就存在活动。
您可以通过编写下面的代码来调用另一个片段:
FragmentTransaction t = this.getFragmentManager().beginTransaction();
Fragment mFrag = new MyFragment();
t.replace(R.id.content_frame, mFrag);
t.commit();
这里的“R.id.content_frame”是要替换片段的布局的id。
您也可以添加其他片段以防替换。
【讨论】:
片段片段=新任务();我收到错误无法将片段转换为任务。该怎么办? —— 请检查导入,使用supportedFragment或Fragments 询问片段的布局 id 为 r.id.task。我当前的片段有布局 id r.id.contact。那么我应该写什么来代替 r.id.content_frame?【参考方案7】:如果您正在寻找上述代码的 Kotlin 版本,您可以通过这种方式进行,您在 onClickListener 处调用 replaceFragment(RequiredFragment())或任何你想要的地方。
private fun replaceFragment(fragment: Fragment)
val transaction = activity!!.supportFragmentManager.beginTransaction()
transaction.replace(R.id.frame, fragment)
transaction.commit()
【讨论】:
【参考方案8】:private boolean loadFragment(Fragment fragment)
if (fragment != null)
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fl_fragment_container, fragment)
.commit();
return true;
return false;
【讨论】:
【参考方案9】:在 kotlin 中,放入当前正在运行的片段 button.setOnClickListener
val bpfragment = TwoFragment()
activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.fragment_container, bpfragment)?.commit()
【讨论】:
以上是关于如何在 Android 中单击 ImageView 时从一个片段移动到另一个片段?的主要内容,如果未能解决你的问题,请参考以下文章
Android当用户单击按钮时如何移动ImageView(对于游戏)
如何在 Android 上的 ImageView 上显示来自网站的图像?