<span style="color:#ff0000">------------activity_main.xml-------------------</span>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar_nav"/><!--从别的地方引入布局,toolbar是导航-->
<FrameLayout
android:id="@+id/fram"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<RadioGroup
android:id="@+id/rgroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:text="首页" android:textSize="20sp"/>
<RadioButton
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:text="消息" android:textSize="20sp"/>
<RadioButton
android:id="@+id/share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:text="分享" android:textSize="20sp"/>
<RadioButton
android:id="@+id/my"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:text="我的"
android:textSize="20sp"
/>
</RadioGroup>
</LinearLayout>
---------------Mainactivity----------------------
public class MainActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener{
private RadioGroup rgroup;
private FragmentManager manage;
private Fragment currentfg;
private Fragmenthome tabOnefg;
private FragmenTwo tabTwofg;
private FragmentThree tabThreefg;
private FragmentFour tabFourfg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void initView(){
rgroup= (RadioGroup) findViewById(R.id.rgroup);/*底部四个按钮的父控件*/
rgroup.setOnCheckedChangeListener(this);/*添加的是setOnCheckedChangeListener方法,在上面实现接口implements RadioGroup.OnCheckedChangeListener,方法在下面onCheckedChanged(RadioGroup group, int checkedId)*/
tabOnefg=new Fragmenthome();
tabTwofg=new FragmenTwo();
tabThreefg=new FragmentThree();
tabFourfg=new FragmentFour();
manage=getSupportFragmentManager();/*系统给提供的管理者*/
manage.beginTransaction().add(R.id.fram,tabOnefg).commit();//,吧fragment绑定到管理者上,默认显示第一个fragment(tabOnefg),R.id.fram是一个宝行fragment对应的xml布局
currentfg=tabOnefg;//标记一下当前的fragment
}
/*下面是根据checkId(radioButton的id)来选在显示哪一个activity,就R.id.*/
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.home:
chageFrag(currentfg,tabOnefg);
break;
case R.id.message:
chageFrag(currentfg,tabTwofg);
break;
case R.id.share:
chageFrag(currentfg,tabThreefg);
break;
case R.id.my:
chageFrag(currentfg,tabFourfg);
break;
}
}
/*from是当前的fragment;tofg是即将要显示的fragment*/
public void chageFrag(Fragment from ,Fragment tofg){
if(currentfg!=tofg){
currentfg=tofg;
if(!tofg.isAdded()){
manage.beginTransaction().hide(from).add(R.id.fram,tofg).commit();//没有添加过,先隐藏当前的framrnt,在添加目标fragment
}else {
manage.beginTransaction().hide(from).show(tofg).commit();//如果添加过,直接show
}
}
}
}
------------fragmentHome---------
/**
* Created by wofu on 2018/3/22.
* XML中的权重:layout_weight
*/
public class Fragmenthome extends Fragment implements View.OnClickListener {
private Button firstBtn;
private Myadapt adp;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragmentl, container, false);//打气筒可以吧xml资源转换成view,
}
/*view创建完毕*/
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
firstBtn = (Button) view.findViewById(R.id.login);
firstBtn.setOnClickListener(this);//按钮点击,下面实现implements View.OnClickListener接口方法
// // ArrayAdapt*********************ArrayAdapter通常用于将数组或List集合的多个值包装成多个列表项。
ListView list = (ListView) view.findViewById(R.id.list);
// String [] das={" a"," b"," c"," d"};
// ArrayAdapter<String> adp=new ArrayAdapter<String>(getContext(),R.layout.itemsingle,R.id.textv,das);
// list.setAdapter(adp);
// SimpleAdapter 的使用*************
List<Map<String,String>> das=new ArrayList<>();
Map<String,String> map=new HashMap<>();
map.put("name","aa1");
map.put("phone","1333");
Map<String,String> map2=new HashMap<>();
map2.put("name","aa2");
map2.put("phone","1333");
Map<String,String> map3=new HashMap<>();
map3.put("name","aa3");
map3.put("phone","1333");
das.add(map);
das.add(map2);
das.add(map3);
//第一个参数是context,第二个参数是List数据,第三个参数是List中的item,第四个参数是map中的键数组,第五个参数是item。xml中的控件
SimpleAdapter sadp=new SimpleAdapter(getContext(),das,R.layout.itemsingle,new String[]{"name","phone"},new int[]{R.id.textl,R.id.textr});
list.setAdapter(sadp);
baseAdapt 的使**********************************
// ListView list = (ListView) view.findViewById(R.id.list);
// adp = new Myadapt();
//
// list.setAdapter(adp);//listview设置适配器
//
// initData();
}
private void initData() {
List<String > da=new ArrayList<>();
da.add("dddd");
da.add("dddd01");
da.add("dddd02");
da.add("dddd03");
adp.setData(da);
}
//按钮点击事件,通过意图吧跳转到下一个activity,吧数据传到下一个页面
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login:
Intent inten = new Intent(getContext(), ACOne.class);
inten.putExtra("f", "diyige");
startActivity(inten);/*跳转到下一个页面*/
break;
}
}
public class Myadapt extends BaseAdapter {
private List<String> data;
public void setData(List<String> data){
this.data=data;
notifyDataSetChanged();
}
@Override
public int getCount() {
if(data==null){
data=new ArrayList<>();
}
return data.size();
}
@Override
public Object getItem(int position) {
Log.e("a","posi:"+position);
return data.get(position);
}
@Override
public long getItemId(int position) {
Log.e("b","posi:"+position);
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
// v = View.inflate(getContext(), R.layout.item, null);//打气筒方法一:吧xml布局转换成view
// v = LayoutInflater.from(getContext()).inflate(R.layout.item,null);//打气筒方法二
LayoutInflater imflate= (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);//打气筒方法三
v=imflate.inflate(R.layout.item,null);
holder.et = (EditText) v.findViewById(R.id.et);
holder.imagV= (ImageView) v.findViewById(R.id.imagv);
} else {
v = convertView;
}
holder.et.setText(data.get(position));
holder.imagV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击imageView
}
});
return v;
}
public class ViewHolder{
ImageView imagV;
EditText et;
}
}
}
---------------fragmentHome.xml------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"/>
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_weight="1"
></ListView>
</LinearLayout>
=====================关闭当前activity,吧数据传给上一个activity=========================
public class MainActivity extends AppCompatActivity {
private TextView tx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
tx = findViewById(R.id.tx_num);
}
//右侧+按钮的点击事件
public void addClick(View v){
Intent intent=new Intent(this,NextActivity.class);
// startActivity(intent);
//如果下一个activity关闭时,要在当前activity获取下一个的数据,就要使用给下面的方法
startActivityForResult(intent,1);//1是requestCode,用于标识请求的来源,在下面的onActivityResult中的requestCode可以区分业务
}
//当开启的activity关闭时调用,也就是下一个activity关闭时,在当前的activity调用
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//requestCode 是从下一个activity关闭的时候传过来的
if(resultCode==10) {
//data就是下一个页面的意图
String name = data.getStringExtra("name");
tx.setText(name);
}else if(resultCode==20){
}
}
}
用于标识请求的来源,在下面的onActivityResult中的requestCode可以区分业务
}
//当开启的activity关闭时调用,也就是下一个activity关闭时,在当前的activity调用
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//requestCode 是从下一个activity关闭的时候传过来的
if(resultCode==10) {
//data就是下一个页面的意图
String name = data.getStringExtra("name");
tx.setText(name);
}else if(resultCode==20){
}
}
}
public class NextActivity extends Activity {
private ListView lv;
private TextView tv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
tv = findViewById(R.id.et_num);
lv = findViewById(R.id.lv_num);
lv.setAdapter( new MyAdapter());
//给listView设置点击事件
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
//adapterView代表Listview,View代表item,i代表当前位置
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//吧数据返回给调用者
Intent intent=new Intent();
intent.putExtra("name","lambo");
setResult(10,intent);//10是resultCode,用于标识返回结果的来源,在上一个activity中的onActivityResult中区分业务;当前activity关闭时,会传给上一个activity
//关闭当前activity,才会执行上一个activity中的方法onActivityResult(int requestCode, int resultCode, Intent data)
finish();
}
});
}
//点击手机后退按钮时调用,当前activity加载完成,并且关闭后调用
@Override
public void onBackPressed() {
super.onBackPressed();
Log.e("s","手机返回按钮");
}
public class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return 5;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v;
if(view ==null){
LayoutInflater imflate= (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);//打气筒方法三
v=imflate.inflate(R.layout.item,null);
tv=(TextView) v.findViewById(R.id.et_num);
}else {
v=view;
}
tv.setText("cccc");
return v;
}
}}
10是resultCode,用于标识返回结果的来源,在上一个activity中的onActivityResult中区分业务;当前activity关闭时,会传给上一个activity
//关闭当前activity,才会执行上一个activity中的方法onActivityResult(int requestCode, int resultCode, Intent data)
finish();
}
});
}
//点击手机后退按钮时调用,当前activity加载完成,并且关闭后调用
@Override
public void onBackPressed() {
super.onBackPressed();
Log.e("s","手机返回按钮");
}
public class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return 5;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v;
if(view ==null){
LayoutInflater imflate= (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);//打气筒方法三
v=imflate.inflate(R.layout.item,null);
tv=(TextView) v.findViewById(R.id.et_num);
}else {
v=view;
}
tv.setText("cccc");
return v;
}
}}
===================fragment之间通信=============
--------Mainactivity-----------
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//获取fragment 管理者
FragmentManager fragmentManager=getFragmentManager();
//开启一个事务
FragmentTransaction beginTracsaction=fragmentManager.beginTransaction();
//替换fragment
beginTracsaction.replace(R.id.llone,new Fragment1(),"one");
beginTracsaction.replace(R.id.lltwo,new Fragment2(),"two");
//开启事务
beginTracsaction.commit();
}
}
---------activity_main.xml------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="com.example.wofu.forteenchangeanotherfragment.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:id="@+id/llone"
android:layout_width="0dp"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"
>
</LinearLayout>
<LinearLayout
android:id="@+id/lltwo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
---------fragment.java---------
public class Fragment1 extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment1,null);
// 给fragment上的按钮添加点击事件
v.findViewById(R.id.btn_change).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//拿到frgment---fragment之间的通信
Fragment2 f2= (Fragment2) getActivity().getFragmentManager().findFragmentByTag("two");//two是fragment2的tag,
f2.changeStr("我要改变世界");
}
});
return v;
}
}
------------fragment1.xml-------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_change"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="改变fragment2"
android:gravity="center"/>
</LinearLayout>
------fragment2.java---------
public class Fragment2 extends Fragment {
private TextView tx;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment2,null);
tx = v.findViewById(R.id.tx_change);
return v;
}
public void changeStr(String content){
tx.setText(content);
}
}
------------fragment2.xml---------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tx_change"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="等待改变"
android:layout_gravity="center"/>
</LinearLayout>