fragment与fragment,activity与fragment传值

接口回掉在安卓开发中应用还是挺多的,我在其中主要是用在各个界面传值,或者在某个控件中实现回掉的监听。今天我就来说说我对接口回掉的理解和应用吧。

接口回掉我对其的理解就是有两个对象,其中一个对象申明接口,并且向接口中写入数据,另外一个对象实现接口,然后从接口中获取数据。其中重要的是实现的接口和申明的接口属于同一个对象中的接口。如果一个对象要获取另外一个对象中的数据,不能直接实例化另外一个对象然后想从中获取数据(单例的可以),这样会报空指针异常。下面我将使用activityfragmentfragmentfragment直接的传值来说明接口回掉在安卓数据传递是怎么得一回事。

Demo1 activityfragment直接传递数据

我的界面是这样的,在一个activity中添加一个fragment,然后再fragment中申明一个接口,然后在activity中实现接口获取接口中的数据。

布局有一个发送的buttonedittextfragment中,接收的textview在主activity中。

下面进行实现代码的讲解我主要说下接口回掉的代码其他的略过,在acitivity中通过fragmentmanager加载fragment

1.在fragment定义接口:

public interface ISendMessage {
    void getmessage(String text);
}

这个接口中的getmessage是获取数据。

2.在fragment使用接口向其中传入数据,等会只要在需要这个数据的地方实现接口即可。

这里是在fragment中定义一个接口类型,然后通过这个类型调用getmessage()向其中传入数据,并且这个sendMessage接口必须要有外部实现才能获取数据,等于就是外部需要给这个sendmessage赋值类似的操作。

private ISendMessage sendMessage;

3.获取数据

text = et_message.getText().toString();
sendMessage.getmessage(text);

获取edittext中的数据并且将数据传入接口中

4.在fragmentontach方法中将activity转换成接口,这里为什么可以将activity转换成接口对象给其中的sendMessage赋值呢?因为我们会为activity实现这个接口,所有就可以将activity强制转换成这个接口类型,要实现接口回掉必须要给接口进行赋值操作,否则会报空指针异常。

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    sendMessage = (ISendMessage) context;
}

5.在activity中实现接口获取数据

public class MainActivity extends AppCompatActivity implements BlankFragment.ISendMessage

@Override
public void getmessage(String text) {
    tv_message.setText(text);
}

获取接口数据。

这样一个完整的fragmentactivity传值就完成了。接下来我将会展示另外一个Demo就是

Fragmentfragment之间的传值,这个传值与通过了中间activity的过度进行完成的,我先说下思路,在一个fragment中定义接口,并且向接口中写入数据,将另外一个fragment实现接口,在activity中通过实例化的fragment将接口传递进获取值得fragment中赋值,即可获取数据。下名进行实例讲解:

前面的三个步骤和fragmentactivity传值步骤一样,我就不写了,直接从第四个开始

1.

2.

3.

4.通过activity将接口传入赋值的fragment

  fragment = new BlankFragment();
blankFragment1 = new BlankFragment1();
fragment.getMess(blankFragment1);

数据源的fragment通过它掉获取数据的方法进行值得获取其方法定义在数据源的fragment中这个方法就和上边的onatach中给数据源接口赋值时类似的,将传入已经实例的接口给数据源fragment中未实例的接口。

public void getMess(ISendMessage sendMessage) {
    this.sendMessage = sendMessage;
}

5.在fragment1中接口的方法中获取数据即可

@Override
public void getmessage(String text) {
    viewById.setText(text);
}

获取数据。

其中我觉得最重要的地方就是要给接口一个实例的对象,从外部需要传入一个实例的对象进来对接口进行实例,然后再通个这个实例好的接口向外部传递数据。

你可能感兴趣的:(Android,Share)