fragment里面是没有findviewbyid的 那么怎么获得其中的控件呢 ?

MainActivity中建立fragmentManager -->使用fm.findFragmentById(R.id.fragment1)

在该fragment 的类中 onCreateView 方法内提供了inflater属性 使用这个属性 可以从XML文件填充一个view(控件就在这个xml文件上) View view = inflater.inflate(R.layout.fragment1, null);

通过这个view 就可以Button bt = (Button) view.findViewById(R.id.bt); 接下来 就可以为其在fragment 的类中注册事件

但是 我们的目的是和其他 fragment 交互 其他fragment的组件我怎么在当前的fragment类中建立关系呢?

在事件中 getActivity() 可以取得当前fragment所绑定的Activity(在这个例子里面是MainActivity)

然后getActivity().getFragmentManager()找到管理者 再findFragmentById(R.id.xxx),即getActivity().getFragmentManager().findFragmentById(R.id.要建立联系的目标fragment)

这时候2者已经建立了联系 此时目标fragment需要暴露一个方法供其他fragment使用

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
 
     
    <fragment 
        android:id="@+id/fragment1"
        android:name="com.example.firstfragment.Fragment1"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        />
    <fragment 
        android:id="@+id/fragment2"
        android:name="com.example.firstfragment.Fragment2"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        />
     
</LinearLayout>

fragment1.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0000ff"
    android:orientation="vertical" >
     
    <Button 
        android:id="@+id/bt"
            android:layout_width="wrap_content"
    android:layout_height="wrap_content"
        android:text="点击改变fragment2的文字 "
        />
 
</LinearLayout>

fragment2.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff0000"
    android:orientation="vertical" >
     
 
    <TextView 
        android:id="@+id/tv"
        android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="我是文本"
        />
</LinearLayout>

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.example.firstfragment;
 
import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.Menu;
 
 
 
public class MainActivity extends Activity
{
 
     
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        //仅仅展示了怎样在MainActivity获得Fragment对象
//      FragmentManager fm = getFragmentManager();
//      Fragment1 fragment1 = (Fragment1) fm.findFragmentById(R.id.fragment1);//找到第一个Fragment
//     
         
    }
 
     
 
}

Fragment1.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.example.firstfragment;
 
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
 
public class Fragment1 extends Fragment
{
 
    /**
     * 当Fragment被创建时候调用的方法,返回当前Fragment显示的内容
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.fragment1, null);
         
        Button bt = (Button) view.findViewById(R.id.bt);
         
        bt.setOnClickListener(new OnClickListener()
        {
             
            @Override
            public void onClick(View v)
            {
                System.out.println("按钮被点击");
                Fragment2 fragment2 = (Fragment2) getActivity().getFragmentManager().findFragmentById(R.id.fragment2);//建立联系
                fragment2.setText("一点击就改变");
            }
        });
         
         
        return view;
    }
}

Fragment2.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.example.firstfragment;
 
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
public class Fragment2 extends Fragment
{
    /**
     * 当Fragment被创建时候调用的方法,返回当前Fragment显示的内容
     */
    private TextView tv ;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.fragment2, null);
        tv = (TextView) view.findViewById(R.id.tv);
        return view;
         
    }
    public void setText(String text)
    {
        tv.setText(text);
    }
}
posted on 2016-02-17 15:15  cheneywang  阅读(155)  评论(0编辑  收藏  举报