Android案例之Fragment的使用——川菜菜譜
本案例將會(huì)演示如何在一個(gè)Activity中展示兩個(gè)Fragment(一個(gè)Fragment用于展示川菜列表,一個(gè)Fragment用于展示川菜做法),并實(shí)現(xiàn)Activity與Fragment通信功能
1. 準(zhǔn)備工作
導(dǎo)入兩個(gè)所需圖片至mipmap文件夾,在res/layout文件夾的activity_main.xml文件中添加兩個(gè)fragment,分別用于顯示菜單列表和菜譜的做法信息
2. 創(chuàng)建兩個(gè)Fragment的布局文件
在res/layout文件夾中分別創(chuàng)建布局文件fragment_menu.xml和fragment_content.xml,展示川菜列表的布局文件fragment_menu.xml中放置一個(gè)ListView控件用于顯示列表,展示菜品的做法的布局文件fragment_content.xml文件中放置一個(gè)TextView用于顯示菜品做法信息
fragment_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/menulist"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
fragment_content.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="18sp"
android:centerVertical="true"
android:layout_alignParentLeft="true"/>
</LinearLayout>
3. 創(chuàng)建川菜列表Item界面
由于展示川菜列表的界面用到了ListView控件,因此需要為該列表創(chuàng)建一個(gè)Item界面
在res/layout文件夾中創(chuàng)建一個(gè)Item界面的布局文件item_list.xml,該文件中放置一個(gè)ImageView控件用于顯示菜品圖片,一個(gè)TextView控件用于顯示菜品名稱
item_list.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<ImageView
android:layout_width="100dp"
android:layout_height="40dp"
android:id="@+id/food_icon"
android:layout_centerInParent="true"
android:layout_margin="10dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/food_name"
android:layout_below="@+id/food_icon"
android:gravity="center"/>
</RelativeLayout>
4. 創(chuàng)建ContentFragment
創(chuàng)建一個(gè)ContentFragment類繼承自Fragment,在該類中獲取界面控件并將菜品做法顯示到控件上
ContentFragment.java
package com.example.test;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class ContentFragment extends Fragment{
private View view;
private TextView mContent;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
//將布局文件解析出來
view = inflater.inflate(R.layout.fragment_content,container,false);
if(view!=null){
initView();
}
//獲取Activity中設(shè)置的文字
setText(((MainActivity)getActivity()).getSettingText()[0];
return view;
}
public void initView(){
mContent = (TextView)view.findViewById(R.id.content);
}
public void setText(String text){
mContent.setText(text);
}
}
第29行代碼通過setText()方法將獲取的Activity中設(shè)置的菜品做法數(shù)據(jù)信息顯示到界面控件上
5. 創(chuàng)建MenuFragment
MenuFragment.java
package com.example.test;
import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MenuFragment extends Fragment{
private View view;
private int[] settingicon;
private String[] foodNames;
private String[] settingText;
private ListView mListView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
//加載布局文件
view = inflater.inflate(R.layout.fragment_menu,container,false);
//獲取Activity實(shí)例對(duì)象
MainActivity activity = (MainActivity)getActivity();
settingicon = activity.getIcons();//獲取Activity中的圖片數(shù)據(jù)
foodNames = activity.getNames();//獲取Activity中定義的川菜名稱
//獲取Activity中設(shè)置的菜品做法數(shù)據(jù)
settingText = activity.getSettingText();
if (view!=null){
initView();
}
//為L(zhǎng)istView設(shè)置條目監(jiān)聽,點(diǎn)擊左側(cè)列表的Item,右側(cè)會(huì)顯示對(duì)應(yīng)的菜品做法信息
mListView.setOnClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//通過Activity實(shí)例獲取另一個(gè)Fragment實(shí)例
ContentFragment listFragment = (ContentFragment)((MainActivity)getActivity()).getFragmentManager().findFragmentById(R.id.foodcontent);
//點(diǎn)擊Item對(duì)應(yīng)的菜品做法信息
listFragment.setText(settingText[position]);
}
});
return view;
}
//初始化控件的方法
private void initView(){
mListView = (ListView)view.findViewById(R.id.menulist);
if(settingicon!=null){
mListView.setAdapter(new MyAdaptter());
}
}
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return settingicon.length;
}
@Override
public Object getItem(int position) {
return settingicon[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(getActivity(),R.layout.item_list,null);
ImageView mNameTV = (ImageView)convertView.findViewById(R.id.food_icon);
mNameTV.setBackgroundResource(settingicon[position]);
TextView mFoodName = (TextView)convertView.findViewById(R.id.food_name);
mFoodName.setText(foodNames[position]);
return convertView;
}
}
}
第38行代碼通過setOnItemClickListener()方法為列表中國(guó)的Item添加點(diǎn)擊事件的監(jiān)聽器,在該監(jiān)聽器中重寫onItemClick()方法
在onItemClick()方法中首先通過getActivity()方法獲取Activity的實(shí)例對(duì)象,接著通過對(duì)象的getFragmentManager()方法獲取FragmentManager的實(shí)例對(duì)象,最后通過findFragmentById()方法獲取到ContentFragment對(duì)象listFragment,并調(diào)用setText()方法設(shè)置點(diǎn)擊的Item對(duì)應(yīng)的菜品做法信息
重點(diǎn)語句:
//通過Activity實(shí)例獲取另一個(gè)Fragment實(shí)例
ContentFragment listFragment = (ContentFragment)((MainActivity)getActivity()).getFragmentManager().findFragmentById(R.id.foodcontent);
6. 編寫MainActivity中的代碼
在MainActivity中將MenuFragment與ContentFragment添加到MainActivity界面
package com.example.test;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
public class MainActivity extends Activity {
private FragmentTransaction beginTransaction;
//菜品做法數(shù)據(jù)
private String[] settingText = {""+"1.將雞蛋清和淀粉調(diào)料調(diào)成糊,涂抹在肉上\n"+"2...\n"+"3...\n"+"4...\n","1.豆腐切丁,香蔥、生姜、大蒜切末備用"+"2...\n"+"3...\n"+"4...\n"};
//設(shè)置菜品圖片數(shù)據(jù)
private int[] settingicons = {R.drawable.chicken,R.drawable.tofu};
private String[] foodNames = {"水煮肉片","麻婆豆腐"};
//獲取菜品圖片數(shù)據(jù)的方法
public int[] geticons(){
return settingicons;
}
public String [] getFoodNames(){
return foodNames;
}
//獲取設(shè)置文字的方法
public String[] getSettingText(){
return settingText;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//創(chuàng)建Fragment實(shí)例對(duì)象
ContentFragment contentFragment = new ContentFragment();
MenuFragment menuFragment = new MenuFragment();
beginTransaction = getFragmentManager().beginTransaction();
//獲取事物添加Fragment
beginTransaction.replace(R.id.foodcontent,contentFragment);
beginTransaction.replace(R.id.menu,menuFragment);
beginTransaction.commit();
}
}
7. 啟動(dòng)測(cè)試
文章來源:http://www.zghlxwxcb.cn/news/detail-418853.html
如果文章對(duì)您有所幫助,記得一鍵三連支持一下哦~文章來源地址http://www.zghlxwxcb.cn/news/detail-418853.html
到了這里,關(guān)于Android案例之Fragment的使用——川菜菜譜的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!