Fragment onCreateview()中Inflate()方法第二个参数,如何理解

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}
inflate()方法的第二个参数container的官方解释:
The ViewGroup to be the parent of the inflated layout. Passing the container is important in order for the system to apply layout parameters to the root view of the
inflated layout, specified by the parent view in which it's going.
请问如何解释和理解这句话?

相信大家对LayoutInflate都不陌生,特别在ListView的Adapter的getView方法中基本都会出现,使用inflate方法去加载一个布局,用于ListView的每个Item的布局。Inflate有三个参数,我在初学Android的时候这么理解的:

对于Inflate的三个参数(int resource, ViewGroup root, boolean attachToRoot)

如果inflate(layoutId, null )则layoutId的最外层的控件的宽高是没有效果的

如果inflate(layoutId, root, false ) 则认为和上面效果是一样的

如果inflate(layoutId, root, true ) 则认为这样的话layoutId的最外层控件的宽高才能正常显示

如果你也这么认为,那么你有就必要好好阅读这篇文章,因为这篇文章首先会验证上面的理解是 错误的 ,然后从源码角度去解释,最后会从ViewGroup与View的角度去解释。

2、 实践是验证真理的唯一标准

下面我写一个特别常见的例子来验证上面的理解是错误的,一个特别简单的ListView,每个Item中放一个按钮:

Activity的布局文件:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/id_listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
ListView的Item的布局文件:

<Button xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/id_btn"
  android:layout_width="120dp"
  android:layout_height="120dp" >

</Button>
ListView的适配器:

package com.example.zhy_layoutinflater;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;

public class MyAdapter extends BaseAdapter
{

  private LayoutInflater mInflater;
  private List<String> mDatas;

  public MyAdapter(Context context, List<String> datas)
  {
    mInflater = LayoutInflater.from(context);
    mDatas = datas;
  }

  @Override
  public int getCount()
  {
    return mDatas.size();
  }

  @Override
  public Object getItem(int position)
  {
    return mDatas.get(position);
  }

  @Override
  public long getItemId(int position)
  {
    return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent)
  {

    ViewHolder holder = null;
    if (convertView == null)
    {
      holder &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过使用接口来实现fragment之间的通信。首先,在第一个fragment定义一个接口,该接口包含一个方法,用于向第二个fragment传递数据。然后,在第二个fragment实现该接口,以便在接收到数据时更新listview。 以下是实现此功能的示例代码: 在第一个fragment定义接口: ``` public interface OnDataChangeListener { void onDataChanged(String data); } ``` 在第一个fragment调用接口方法,并将数据传递给第二个fragment: ``` OnDataChangeListener listener = (OnDataChangeListener) getActivity(); listener.onDataChanged("new data"); ``` 在第二个fragment实现接口,并在接收到数据时更新listview: ``` public class SecondFragment extends Fragment implements OnDataChangeListener { private ListView listView; private ArrayAdapter<String> adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_second, container, false); listView = view.findViewById(R.id.list_view); adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, new ArrayList<>()); listView.setAdapter(adapter); return view; } @Override public void onDataChanged(String data) { adapter.add(data); adapter.notifyDataSetChanged(); } } ``` 在这个示例,当第一个fragment调用接口方法时,会触发第二个fragment的onDataChanged方法,该方法将数据添加到adapter,并通知listview更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值