【Android studio】activity-ac、fragment-activity、ac-frag
前言
本博文主要是对activity-ac、fragment-activity、ac-frag跳转实现的一个介绍,以及记录,方便后续使用时候可以直接加载。
博文中出现的ac、frag 分别表示 activity 和 fragment ,只是偷个懒,方便书写与阅读。
activity、fragment介绍
在Android Studio中,Activity和Fragment是两个常用的组件。它们都用于构建用户界面,但有些细微的区别。
-
Activity是一个独立的界面单元,它代表应用程序中的一个屏幕。每个Activity都有一个用户界面,并且可以接收和处理用户输入。例如,一个登录页面、一个设置页面或一个主屏幕都可以是一个Activity。Activity通常通过Intent来启动和销毁。
-
Fragment是Activity的一部分,它可以在Activity的用户界面中嵌入或替换其他Fragment。它们可以理解为模块化的UI组件。Fragment具有自己的生命周期,并且可以接收和处理用户输入。使用Fragment可以使界面更加灵活和可复用。例如,一个新闻应用可以将新闻列表作为一个Fragment,将新闻详情作为另一个Fragment,然后通过切换Fragment来显示不同的内容。
在Android开发中,通常使用Activity作为应用的主要界面,然后使用Fragment来构建复杂的界面和交互。可以将Activity看作是容器,而Fragment是容器中的内容。
需要注意的是,Fragment只能在支持Fragment的操作系统版本上使用。而Activity可以在所有Android版本上使用。
实现
activity-ac
//ac-ac(跳转+数据)
Intent intent=new Intent(this, SecondActivity.class);
startActivity(intent);
fragment-activity
//frag-ac(跳转+数据)
//frag
intent =getActivity().getIntent();
intent.setClass(getActivity(),Apply_situation_deal.class);
//传递参数
Bundle bundle=new Bundle();
bundle.putString("model_id", module_id);
intent.putExtras(bundle);
startActivity(intent);
//ac解析
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
use_num=bundle.getString("use_num");
module_id=bundle.getString("model_id");
//frag-ac(frag属于ac、数据)
//frag
//1.定义回调接口
public interface CallBack{
/*定义一个获取信息的方法*/
public void getResult(String result);
}
//2.接口回调
public void getData(CallBack callBack){
/*获取文本框的信息,当然你也可以传其他类型的参数,看需求咯*/
String msg = editText.getText().toString();
callBack.getResult(msg);
}
//ac
//读取数,解析
leftFragment.getData(new CallBack() {
@Override
public void getResult(String result) { /*打印信息*/
Toast.makeText(MainActivity.this, "-->>" + result, 1).show();
}
});
ac-frag
//ac-frag(数据+调转)
在activity中加载 frament,并传递给它参数 --ac //setArguments
//1.实例化Fragment
Fragment f1 = new Fragment1();
//2.实例化一个Bundle对象
Bundle bundle = new Bundle();
//3.存入数据到Bundle对象中
bundle.putString("msg1","这是由Activity发往Fragment的数据");
//4.调用Fragment的setArguments方法,传入Bundle对象
f1.setArguments(bundle);
//5.添加/替换显示的Fragment
//transaction.replace(R.id.container,f1);
transaction.replace(R.id.container,f1);replace(R.id.container,f1).commit();
//frag
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.e("TAG","onCreateView--Fragment视图创建好了");
View v = inflater.inflate(R.layout.fragment_fragment1, container, false);
Bundle b = getArguments();
String msg1 = b.getString("msg1");
((TextView)v.findViewById(R.id.txt1)).setText(msg1);
return v;
}
//ac-frag(数据)
//ac
public class MainActivity extends AppCompatActivity {
public String msg = "How are you ";
}
//frag
public void onAttach(Context context) {
super.onAttach(context);
String msg = ((MainActivity)context).msg;
Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();
Log.e("TAG","onAttach--Fragment与Activity关联");
}
//适配器
Intent intent = new Intent(mContext, Deal_content.class);
Bundle bundle=new Bundle();
bundle.putString("model_id",bean.getModel_id());
bundle.putString("situation",bean.getSituation());
bundle.putString("use_num",bean.getUse_num());
bundle.putString("apply_time",bean.getApply_time());
intent.putExtras(bundle);
mContext.startActivity(intent);
额外补充
需求实现部分就先到这!接下来,是一些个人平时整理的c++要点概要,如有需要可以进行阅读!
结构体
- 第一种是最基本的结构体定义, 其定义了一个结构体 A。
struct A { int a;};
- 第二种则是在定义了一个结构体 B 的同时定义了一个结构体 B 的变量 m。
struct B { int b;}m;
- 第三种结构体定义没有给出该结构体的名称, 但是定义了一个该结构体的变量 n, 也就是说,若是想要在别处定义该结构体的变量是不行的, 只有变量 n 这种在定义结构体的同时定义变量才行。
struct { int c;}n;
- 第四种结构体定义在第一种结构定义的基础上加了关键字
typedef
, 此时我们将struct D{int d}
看成是一个数据类型, 但是因为并没有给出别名, 直接用 D 定义变量是不行的。 如D test;
,不能直接这样定义变量 test。 但struct D test;
可行。
typedef struct D { int d;};
- 第五种结构体定义在第四种结构体定义的基础上加上了别名 x, 此时像在第四种结构体定义中说得那样, 此时的结构体 E 有别名 x, 故可以用 x 定义 E 的结构体变量。 用 E 不能直接定义, 需要在前面加
struct,
如struct E test;
。
typedef struct E { int e;}x;
- 第六种结构体定义在第五种的基础上减去了结构体名, 但是若是直接使用 y 来定义该结构体类型的变量也是可以的。 如
y test;
。 (常用)
typedef struct { int f;}y;
使用内联函数的时候要注意:
函数重载
- C++函数重载的判断依据
- 函数形参的个数;
- 函数形参的类型;
- 形参的顺序;
- 不能把返回值作为函数重载的条件, 原因是编译器在编译时不会去判断函数的返回类型,函数只有调用后, 编译器才会去验证返回类型, 所以返回值不能作为函数重载的依据;
- 常函数 const 可以作为函数重载判断依据, 原因: 重载[]运算符时, 有没有 const 的区别是: 有 const 只读, 没有 const 读写都可以。
- 注意事项:
- 形参的个数或类型至少要有一项是不同的;
- 编译器不以返回值来区分函数。
虚函数和纯虚函数
纯虚函数是指在 C++中, 函数可以用“virtual”和“= 0”关键字来声明。 该函数是一个虚函数,但是在声明时, 没有定义它的函数体。 它是一个空函数, 只提供函数声明, 而不提供实际实现。 由于它编译器不能确定如何实现, 因此需要在子类中实现它。 因此, 纯虚函数也被称为抽象函数。 形如:
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
…
};
虚函数和纯虚函数的特性:
- 虚函数可以在类中声明, 也可以在类的外部声明, 编译器会自动将它们转换为虚函数;但是纯虚函数只能在类中声明, 而不能在类的外部声明。
- 虚函数可以有实现, 也可以没有实现; 而纯虚函数没有实现, 不可以有实现。
- 虚函数可以在子类中覆盖, 也可以不被覆盖; 而纯虚函数必须在子类中覆盖, 否则编译器将报错。
- 虚函数可以被多态调用, 也可以被静态调用; 而纯虚函数只可以被多态调用, 不可以被静态调用。