android - 在另一个视图文件中使用变量

时间:2016-04-20 02:37:00

标签: android variables view

我有两个视图,我想访问存储在视图A中的变量中的数据,并在视图B中传递它。

我该怎么做?

谢谢,

2 个答案:

答案 0 :(得分:1)

没有神奇的方法,

ViewA va = ...;
ViewB vb = ...;
...
vb.setData(va.getData());

您必须将数据从ViewA设置为ViewB。或者,您可以使用侦听器模式在数据更改时让ViewA通知ViewB

interface ViewADataListener {
  void onDataChanged(Data d);
}

class ViewB implements ViewADataListener { ... }

ViewA va = ...;
ViewB vb = ...;
...
va.setDataChangedListener(vb);

然后在ViewA的实现中,它必须在ViewB上调用监听器方法。

答案 1 :(得分:1)

  1. 使用界面。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ViewA viewA = new ViewA();
        ViewB viewB = new ViewB();
        viewB.setViewA(viewA);
    }
    
    class ViewA {
        private Object mData;
    
        public Object getData() {
            return mData;
        }
    }
    
    class ViewB {
        ViewA mViewA;
    
        public void setViewA(ViewA viewA) {
            mViewA = viewA;
        }
    
        private void test() {
            if (mViewA != null) {
                Object obj = mViewA.getData();
            }
        }
    }
    
  2. 在视图B中将视图A视为变量。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        ViewA viewA = new ViewA();
        ViewB viewB = new ViewB();
        viewB.setCallBack(viewA.getCallBack());
    }
    
    interface DataCallBack {
        Object getData();
    }
    
    class ViewA {
    
        private Object mData;
    
        private DataCallBack mCallBack = new DataCallBack() {
            @Override
            public Object getData() {
                return mData;
            }
        };
    
        public DataCallBack getCallBack() {
            return mCallBack;
        }
    }
    
    class ViewB {
        DataCallBack mDataCallBack;
    
        public void setCallBack(DataCallBack callBack) {
            mDataCallBack = callBack;
        }
    
        private void test() {
            if (mDataCallBack != null) {
                Object obj = mDataCallBack.getData();
            }
        }
    }
    
  3. ... 3./4./5

    仅限FYR。 因为存在数千种解决问题的方法。