Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将一个自定义视图的对象访问到在Activty类上创建的另一个自定义视图_Android_Android Canvas_Android Custom View - Fatal编程技术网

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);  
}
这样可以避免将null
AttributeSet
传递给视图,并按如下方式调用自定义视图:
CustomView1 view1=newcustomview1(context)


publiccustomview1(Context-Context,AttributeSet-attrs)
构造函数用于处理通过布局xml文件而非编程方式声明自定义视图的情况。您需要以这种方式以编程方式设置视图的布局属性。查看相关帮助。

我可以在CustomView1类上创建这样的对象吗。CustomView2=新CustomView2(上下文,空);我是面向对象编程的新手。我们能在普通课堂上也使用这种方法吗?@user2737044关于你的第一个问题,我已经更新了我的答案。是的,您可以将此方法用于普通类(不是活动、服务等的类)。