问题描述:
项目中有时候会遇到很复杂的页面,比如在同个Activity或者Fragment中要实现两个界面,本文介绍一种比较简单的拆分方法。
先上效果图:
第一个界面和第二个界面,两个Button都是在自定义的View中实现
点击的操做没有在主界面的Activity中实现,而是抽到第一个界面的自定义View的类中实现了。
代码解析:
- 自定义一个容器类,重写onFinishInflate的回调方法,在此处实现用户交互的代码。
public class MySecondView extends FrameLayout{
public MySecondView(Context context) {
super(context);
}
public MySecondView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MySecondView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public MySecondView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
Button mButton = (Button) this.findViewById(R.id.bt_second);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "这是在MySecondView中实现的操作", Toast.LENGTH_LONG).show();
}
});
}
}
- 在xml文件中引入,作为容器;
<?xml version="1.0" encoding="utf-8"?>
<com.ryan.gdin.myapplication.MyFirstView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/bt_first"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="@string/first"/>
</com.ryan.gdin.myapplication.MyFirstView>
- 在MainActivity的布局文件中include进来:
<include
android:id="@+id/first"
layout="@layout/my_first_layout"/>
第二个界面的做法一样,这样处理后,在MainActivty中代码就很精简了:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
这样处理,本来一个界面的东西分成三部分,对于不复杂的界面就没必要这样处理啦,但是对于复杂的绝对是神器,方便代码维护!
此至,抛砖引玉,献丑啦!