Android Fragment跳转到Activity的方法
Posted weixin_44812351
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Fragment跳转到Activity的方法相关的知识,希望对你有一定的参考价值。
一开始我直接按照Activity页面之间跳转的方法进行的跳转,就是在xml文件中给相应的组件onClick
android:onClick="to_search"
在网上查询到的好像都是下面这种
Intent intent = new Intent(getActivity(),SearchActivity.class);
startActivity(intent);
但是我在Fragment的Java文件中用到这个并不能实现预想的效果。
在多次尝试后我直接在Fragment所嵌入的Activity的Java文件中添加了以下代码,实现了跳转的效果。
//跳转到搜索的页面
public void to_search(View view)
Intent intent = new Intent(FragmentActivity.this,SearchActivity.class);
startActivity(intent);
System.out.println("发生了跳转");
虽然不是很懂原理,但是这个是实现了效果的。但是这个好像不是很合理,这就是一个简单的Activity之间的跳转。
后面发现在Fragment页面由点击事件时不能像在Activity页面一样,直接写方法。如下,是错误的形式,不能实现效果。
public void to_search(View view)
Intent intent = new Intent(getActivity(),SearchActivity.class);
startActivity(intent);
在Fragment中如果有点击事件应如下:
首先在xml中不需要有onClick方法,只需要定义id就可以了如下:
<ImageView
android:id="@+id/search_icon"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:src="@drawable/search"/>
然后在相应的Fragment的java文件中如下操作。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the layout for this fragment
// 这里默认的是return inflater.inflate(R.layout.fragment_index, container, false);
// 因为后面的监听中有view 先不return,先定义一个
final View view = inflater.inflate(R.layout.fragment_index, container, false);
// 组件绑定 通过id 为了方便就直接用一样的id
ImageView search_icon = view.findViewById(R.id.search_icon);
//设置点击事件
search_icon.setOnClickListener(new View.OnClickListener()
//跳转到搜索的页面 这里需要注意不需要像Activity之间跳转的那样,自己定义方法名,之间onClick就可以了
@Override
public void onClick(View view)
//到这里使用网上搜到的就可以了正常实现了。
Intent intent = new Intent(getActivity(),SearchActivity.class);
startActivity(intent);
System.out.println("跳转到搜索页面");
);
//这里要注意return view;不能缺少
return view;
总结:网上查询到的跳转代码没有错误,但是不够全面,容易造成误解。
正确的方法应该是在Frangment的onCreateView中绑定组件,再给组件添加相应事件,实现效果。
android Fragment跳转到Activity,再返回实现刷新Fragment(广播方法)
在Activity中的返回点击事件中的finish()前
textViewLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent2 = new Intent("android.intent.action.CART_BROADCAST");
intent2.putExtra("data","refresh");
LocalBroadcastManager.getInstance(MineActivity.this).sendBroadcast(intent2);
sendBroadcast(intent2);
finish();
}
});
Fragment中
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.CART_BROADCAST");
BroadcastReceiver mItemViewListClickReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent){
String msg = intent.getStringExtra("data");
if("refresh".equals(msg)){
refresh();
}
}
};
broadcastManager.registerReceiver(mItemViewListClickReceiver, intentFilter);
}
private void refresh() {
initview();
initName();
initAvatar();
}
其中的refresh()是初始化控件和初始化数据,即刷新操作
以上是关于Android Fragment跳转到Activity的方法的主要内容,如果未能解决你的问题,请参考以下文章
android中在fragment A里面点击button跳转到fragment B怎么实现?
android Fragment跳转到Activity,再返回实现刷新Fragment(广播方法)
Android Fragment跳转到Activity的方法
android fragment中有Listview,通过点击item跳转到另一个有ListView的fragment中