Android:在setContentView之后将值传递给view

Android:在setContentView之后将值传递给view,android,Android,Android新手,在将数据从活动传递到视图时遇到一些问题。对于我的活动,我有一个简单的Android onCreate方法 public class MyActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent inte

Android新手,在将数据从活动传递到视图时遇到一些问题。对于我的活动,我有一个简单的Android onCreate方法

public class MyActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        int num = intent.getIntExtra(MainActivity.EXTRA_NUM, 0);
        setContentView(R.layout.play_game); //this is a MyView class inside of a LinearLayout
        //where I want to pass the value of num to MyView
        MyView myView = (MyView) findViewById(R.id.myview);
        myView.setNum(num);
    }
}


public class MyView extends View {
    protected int num;
    protected int[] array;

    public MyView(Context context) {
        super(context);
        init();
    }

    public MyView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        init();
    }

    protected void init() {
        setBackgroundResource(R.drawable.pic1);
        array = new int[num];
    }

    public void setNum(int num) {
        this.num = num;
    }
}

但是,我不知道如何将值传递给MyView类(它扩展了View)。我只想发送一个整数值,视图类将在启动构造函数之前获取该整数值。

通过MyActivity类的
oncreate()
中的
findViewById()
获取视图id

MyView mv=(MyView) findViewById(R.id.your-view-id); 
然后通过方法
getdata()

其中
getdata()
方法如下所示

public void getdata(int value)
{
  this.value=value;
}

通过MyActivity类的
oncreate()
中的
findViewById()
获取视图id

MyView mv=(MyView) findViewById(R.id.your-view-id); 
然后通过方法
getdata()

其中
getdata()
方法如下所示

public void getdata(int value)
{
  this.value=value;
}

通过MyActivity类的
oncreate()
中的
findViewById()
获取视图id

MyView mv=(MyView) findViewById(R.id.your-view-id); 
然后通过方法
getdata()

其中
getdata()
方法如下所示

public void getdata(int value)
{
  this.value=value;
}

通过MyActivity类的
oncreate()
中的
findViewById()
获取视图id

MyView mv=(MyView) findViewById(R.id.your-view-id); 
然后通过方法
getdata()

其中
getdata()
方法如下所示

public void getdata(int value)
{
  this.value=value;
}
  • setter
    方法添加到您的
    MyView
    类中

    public void setNum(int num)
    {
        this.num=num;
    }
    
  • MyActivity
    中查找您的视图

    MyView myView=(MyView) findViewById(R.id.ID_OF_YOURS_VIEW_IN_ACTIVITYS_LAYOUT);
    
  • 通过将值传递给
    setter
    方法,将值设置为视图

    myView.setNum(num);
    
  • setter
    方法添加到您的
    MyView
    类中

    public void setNum(int num)
    {
        this.num=num;
    }
    
  • MyActivity
    中查找您的视图

    MyView myView=(MyView) findViewById(R.id.ID_OF_YOURS_VIEW_IN_ACTIVITYS_LAYOUT);
    
  • 通过将值传递给
    setter
    方法,将值设置为视图

    myView.setNum(num);
    
  • setter
    方法添加到您的
    MyView
    类中

    public void setNum(int num)
    {
        this.num=num;
    }
    
  • MyActivity
    中查找您的视图

    MyView myView=(MyView) findViewById(R.id.ID_OF_YOURS_VIEW_IN_ACTIVITYS_LAYOUT);
    
  • 通过将值传递给
    setter
    方法,将值设置为视图

    myView.setNum(num);
    
  • setter
    方法添加到您的
    MyView
    类中

    public void setNum(int num)
    {
        this.num=num;
    }
    
  • MyActivity
    中查找您的视图

    MyView myView=(MyView) findViewById(R.id.ID_OF_YOURS_VIEW_IN_ACTIVITYS_LAYOUT);
    
  • 通过将值传递给
    setter
    方法,将值设置为视图

    myView.setNum(num);
    
  • 在setContentView之后

    MyView mv = (MyView) findviewById(R.id.myView);
    mv.setData(int number);
    
    您需要将setData公开。请确保将myview的id设置为

     android:id="@+id/myView"
    
    在xml中。setContentView之后

    MyView mv = (MyView) findviewById(R.id.myView);
    mv.setData(int number);
    
    您需要将setData公开。请确保将myview的id设置为

     android:id="@+id/myView"
    
    在xml中。setContentView之后

    MyView mv = (MyView) findviewById(R.id.myView);
    mv.setData(int number);
    
    您需要将setData公开。请确保将myview的id设置为

     android:id="@+id/myView"
    
    在xml中。setContentView之后

    MyView mv = (MyView) findviewById(R.id.myView);
    mv.setData(int number);
    
    您需要将setData公开。请确保将myview的id设置为

     android:id="@+id/myView"
    

    在xml中。

    您有几个选项:

    从init()中删除数组的初始化,或者像其他人建议的那样为它指定一个默认值以避免错误。这取决于具有默认值的数组在您的上下文中是否有意义。最后用setter注入数字

    您还可以定义一个静态方法,用于在调用视图构造函数之前设置活动中的数字(在使用findViewById()膨胀视图之前执行此操作)。但从生成的角度来看,这是一种不好的做法,应该在特定情况下使用


    真正的问题可能是:init()调用在构造函数中有意义吗?数组必须在视图构造时设置?以后不能初始化吗

    您有几种选择:

    从init()中删除数组的初始化,或者像其他人建议的那样为它指定一个默认值以避免错误。这取决于具有默认值的数组在您的上下文中是否有意义。最后用setter注入数字

    您还可以定义一个静态方法,用于在调用视图构造函数之前设置活动中的数字(在使用findViewById()膨胀视图之前执行此操作)。但从生成的角度来看,这是一种不好的做法,应该在特定情况下使用


    真正的问题可能是:init()调用在构造函数中有意义吗?数组必须在视图构造时设置?以后不能初始化吗

    您有几种选择:

    从init()中删除数组的初始化,或者像其他人建议的那样为它指定一个默认值以避免错误。这取决于具有默认值的数组在您的上下文中是否有意义。最后用setter注入数字

    您还可以定义一个静态方法,用于在调用视图构造函数之前设置活动中的数字(在使用findViewById()膨胀视图之前执行此操作)。但从生成的角度来看,这是一种不好的做法,应该在特定情况下使用


    真正的问题可能是:init()调用在构造函数中有意义吗?数组必须在视图构造时设置?以后不能初始化吗

    您有几种选择:

    从init()中删除数组的初始化,或者像其他人建议的那样为它指定一个默认值以避免错误。这取决于具有默认值的数组在您的上下文中是否有意义。最后用setter注入数字

    您还可以定义一个静态方法,用于在调用视图构造函数之前设置活动中的数字(在使用findViewById()膨胀视图之前执行此操作)。但从生成的角度来看,这是一种不好的做法,应该在特定情况下使用


    真正的问题可能是:init()调用在构造函数中有意义吗?数组必须在视图构造时设置?以后不能初始化吗

    MyView类在哪里?如果不想在视图中添加setter,可以直接从视图的intent中获取该值。在自定义视图中,使用
    int num=((活动)上下文).getIntent().getIntExtra(MainActivity.EXTRA_num,0)MyView类在哪里?如果不想在视图中添加setter,可以直接从视图的intent中获取该值。在自定义视图中,使用
    int num=((活动)上下文).getIntent().getIntExtra(MainActivity.EX