Fragment
意思为碎片、片段。
在Android中有些Activity在手机上看起来很美观,但放在屏幕更大的平板类的设备上,可能就不一样了,而Fragment
能在一个Activity中内嵌多个独立的小Activity,有效的解决了app在大屏设备上的显示问题。
在布局文件l中
添加两个FrameLayout
控件。
<FrameLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:id="@+id/leftcontainer"android:layout_weight="2"></FrameLayout><FrameLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:id="@+id/rightcontainer"android:layout_weight="3"></FrameLayout>
android:layout_width="0dp"
和 android:layout_weight="2"
需要搭配使用,表示id为leftcontainer
的占屏幕的2份(即2/5),id为rightcontainer
占屏幕3份(即3/5)。
在Android Studio界面中点击右上角的File,依次选择new->Java Class,命名为LeftFragment
,RightFragment
。 再点击new->XML->layout XML File,命名为leftfragmentlayout
,rightfragmentlayout
。
布局文件名不可大写。
在LeftFragment.java和RightFragment.java中继承Fragment。注意Fragment的版本。
接着输入
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {view=inflater.inflate(R.layout.leftfragmentlayout,container,false);
在新建的两个布局文件中输入以下代码。
//l
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="#cccc11"><ListViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/title_list"/>
</LinearLayout>
//l
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="#fcabff"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/tv_title"android:gravity="center" /><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/tv_content" /></LinearLayout>
android:background="#fcabff"
是为了能区分两个Fragment,实际操作中不需要这个。
在MainActivity中对新建的Fragment初始化。
private void initView() {LeftFragment leftFragment=new LeftFragment();RightFragment rightFragment=new RightFragment();FragmentManager manager=getSupportFragmentManager();FragmentTransaction transaction=manager.beginTransaction();transaction.add(R.id.leftcontainer,leftFragment);transaction.add(R.id.rightcontainer,rightFragment);transactionmit();}
定义数据,我们直接给 Fragment几串数据。
private String[] titles={"标题1","标题2","标题3"}
private String[][] titlesAndContents={{"标题1","正文1"},{"标题2","正文2"},{"标题3","正文3"}public String[] getTitles() {
return titles;
}
public String[][] getTitlesAndContents() {
return titlesAndContents;
}
数据接收
LeftFragment
//LeftFragment.javaprivate View view;
private String[] titles;
private String[][] titlesAndContents;
private ListView listView;
//此处省略了一部分代码,在上文已经写过。MainActivity mainActivity=(MainActivity) getActivity();
titlesTitles();
titlesAndContentsTitlesAndContents();
if(view!=null){
listView=view.findViewById(R.id.title_list);
MyAdapter adapter=new MyAdapter(getContext(),titles);
listView.setAdapter(adapter);
}
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 在LeftFragment中获取RightFragment的实例
RightFragment rightFragment=(RightFragment) ((MainActivity)getActivity()).getSupportFragmentManager().findFragmentById(R.id.rightcontainer);
rightFragment.setText(titlesAndContents[position]);
}
});
return view;
RightFragment
//RightFragment.java
private View view;
private String[][] titlesAndContents;
private TextView tv_title,tv_content;//此处省略了一部分代码,在上文已经写过。MainActivity mainActivity=(MainActivity) getActivity();titlesAndContentsTitlesAndContents();if(view!=null){tv_title=(TextView) view.findViewById(R.id.tv_title);tv_content=(TextView)view.findViewById(R.id.tv_content);setText(titlesAndContents[0]);}return view;}public void setText(String[] strings){tv_title.setText(strings[0]);tv_content.setText(strings[1]);}
}
上述代码省略了导包的代码,请自己添加(波浪线处按住Alt+Enter)。
为了能在Activity中自由切换我们还需要自定义一个适配器。
新建一个MyAdapter.java
public class MyAdapter extends BaseAdapter {private Context context;private String[] titles;public MyAdapter(Context context, String[] titles) {t = context;this.titles = titles;}@Overridepublic int getCount() {return titles.length;}@Overridepublic Object getItem(int position) {return titles[position];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder=null;if(convertView==null){convertView= LayoutInflater.from(context).inflate(R.layout.title_item_layout,null);holder=new ViewHolder();View=(TextView)convertView.findViewById(R.id.tv_title);convertView.setTag(holder);}else{holder=(ViewHolder) Tag();}View.setText(titles[position]);return convertView;}class ViewHolder{TextView textView;}
}
完整代码下载连接
ECHK1NG’s 学习之路(文章末尾)
CSDN下载
本文发布于:2024-01-31 09:29:59,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170666460027541.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |