将更改数据从视图发送到片段

时间:2014-08-17 22:09:06

标签: android android-fragments view

我有一个Activity,它的Layout包含一个我能够绘制的CustomView,我还有一个片段,我将对其中使用的颜色,笔划宽度和另一个变量进行统计。所以我必须将信息发送到Fragment。

我该怎么做?

我的第一个想法是制作带有颜色,笔画等的列表,然后将每个绘图添加到它所构成的颜色列表中,然后获取列表的大小,最后将其发送到片段。 / p>

或者我可以创建一个变量,并且每次添加颜色,笔触宽度和变量时,特定变量都会增加,但这是同样的问题,我不知道如何将值发送到片段。

第二个问题是这个变量正在改变,所以如果你用红色做一个小线并且你去了statisitc它应该说1个小红线。如果再制作另一个,那么它应该说2条小红线,我怎样才能收到这些值的最新值?

2 个答案:

答案 0 :(得分:0)

您可以创建Interface以在View和Fragment之间进行通信。阅读有关Java接口here

的更多信息
public class drawView extends View {
    private OnColorChangedListener mListener;

    //
    public interface OnColorChangedListener {
        public void colorChanged(int color);
    }

    public void setOnColorChangedListener(OnColorChangedListener listener){
        mListener = listener;
        //Call this method to implement this interface in your Fragment
    }

    @Override
    public void onDraw(Canvas canvas){
        if(mListener != null){
            mListener.colorChanged(somecolor);
        }
    }
}

public class SomeFragment extends Fragment implements OnColorChangedListener {
    public void onCreate(){
        drawView v = new drawView();
        v.setOnColorChangedListener(this);
    }
    //If your class claims to implement an interface, all methods defined by that interface must appear in its source code before the class will successfully compile. 
    public void colorChanged(int color){
        //Do your stuff with your color
    }
}

答案 1 :(得分:0)

一个可能的解决方案是使用Observer / Observable模式。在这种情况下,您的CustomView是Observable,而Fragment是Observer。创建具有适当名称的Observer(或Listener接口),更改Fragment以实现此接口,并向CustomView添加方法以将Fragment注册为侦听器。现在,您需要做的就是从Listener接口调用onXxx()方法,以便通知Fragment绘制了一条线。然后片段负责计算您需要的统计数据。