Android 将一个自定义视图的对象访问到在Activty类上创建的另一个自定义视图
我的实际问题是:我在Android 将一个自定义视图的对象访问到在Activty类上创建的另一个自定义视图,android,android-canvas,android-custom-view,Android,Android Canvas,Android Custom View,我的实际问题是:我在CustomView1类中有一个数组。我想在CustomView2类中访问它。当它填满时,我必须调用view2.invalidate() 这是我的活动课: public class TestApp extends Activity { CustomView1 view1; CustomView2 view2; @Override public void onCreate(Bundle savedInstan
CustomView1
类中有一个数组。我想在CustomView2
类中访问它。当它填满时,我必须调用view2.invalidate()
这是我的活动课:
public class TestApp extends Activity {
CustomView1 view1;
CustomView2 view2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view1 = (CustomView1) findViewbyId(R.id.CustomViewID1);
view2 = (CustomView2) findViewbyID(R.id.CustomViewID2);
}
}
这是我的第一堂课。这里我想调用view2.invalidate()
这是我的第二个CustomView
课程。在这里,我想访问我在Activity类中创建的CustomView1
(即view1
object)类的同一个对象
public class CustomView2 extends View {
public CustomView2(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
可以这样访问吗?还有其他办法吗 您只需拥有一个
CustomView2视图2代码>您的CustomView1
类中的成员。在布局时,只需告诉view1它的view2是什么
这可能是这样的:
view2 = (CustomView2)findViewById(R.id.view2);
view1 = (CustomView1)findViewById(R.id.view1);
view1.setView2(view2);
public class TestApp extends Activity
{
CustomView1 view1 ;
CustomView2 view2 ;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view1 = (CustomView1) findViewbyId(R.id.CustomViewID1);
view2 = (CustomView2) findViewbyID(R.id.CustomViewID2);
view1.setCustomView2(view2);
view2.setCustomView1(view1);
}
}
public CustomView1(Context context)
{
super(context);
}
为了实现这一点,您需要在自定义视图类中有这些视图的引用。
类似于CustomView1
(相同的逻辑适用于CustomView2
):
要使用它,您需要以下内容:
view2 = (CustomView2)findViewById(R.id.view2);
view1 = (CustomView1)findViewById(R.id.view1);
view1.setView2(view2);
public class TestApp extends Activity
{
CustomView1 view1 ;
CustomView2 view2 ;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view1 = (CustomView1) findViewbyId(R.id.CustomViewID1);
view2 = (CustomView2) findViewbyID(R.id.CustomViewID2);
view1.setCustomView2(view2);
view2.setCustomView1(view1);
}
}
public CustomView1(Context context)
{
super(context);
}
编辑:
除了已有的构造函数外,还可以为CustomView1
类创建另一个自定义构造函数。大概是这样的:
view2 = (CustomView2)findViewById(R.id.view2);
view1 = (CustomView1)findViewById(R.id.view1);
view1.setView2(view2);
public class TestApp extends Activity
{
CustomView1 view1 ;
CustomView2 view2 ;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view1 = (CustomView1) findViewbyId(R.id.CustomViewID1);
view2 = (CustomView2) findViewbyID(R.id.CustomViewID2);
view1.setCustomView2(view2);
view2.setCustomView1(view1);
}
}
public CustomView1(Context context)
{
super(context);
}
这样可以避免将nullAttributeSet
传递给视图,并按如下方式调用自定义视图:CustomView1 view1=newcustomview1(context)
publiccustomview1(Context-Context,AttributeSet-attrs)
构造函数用于处理通过布局xml文件而非编程方式声明自定义视图的情况。您需要以这种方式以编程方式设置视图的布局属性。查看相关帮助。我可以在CustomView1类上创建这样的对象吗。CustomView2=新CustomView2(上下文,空);我是面向对象编程的新手。我们能在普通课堂上也使用这种方法吗?@user2737044关于你的第一个问题,我已经更新了我的答案。是的,您可以将此方法用于普通类(不是活动、服务等的类)。