android整体框架的搭建(方法一radiogroup+frament切换)、fragment的使用

<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>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值