Android新手,在将数据从activity传递给view时遇到了一些麻烦。我有一个简单的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类(它扩展视图)。我只是想发送一个整数值,视图类将在开始构造函数之前得到。
-
为您的
MyView
类添加setter
方法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);
在MyActivity类的oncreate()
中获得findViewById()
的视图id
MyView mv=(MyView) findViewById(R.id.your-view-id);
然后通过方法getdata()
mv.getdata(value);
其中getdata()
方法看起来像
public void getdata(int value)
{
this.value=value;
}
after setContentView
MyView mv = (MyView) findviewById(R.id.myView);
mv.setData(int number);
你需要将setData设为public。确保用
设置myview的id android:id="@+id/myView"
在xml。您有几个选择:
从init()中删除数组的初始化,或者像其他人建议的那样为避免错误给它一个默认值。这取决于具有默认值的数组在您的上下文中是否有意义。最后用setter注入数字。
您还可以定义一个静态方法,用于在调用视图构造函数之前从活动设置数字(在使用findViewById()膨胀视图之前进行)。但总的来说,这是一个不好的做法,应该在特定情况下使用。
真正的问题可能是:init()调用在构造函数中是否有意义,数组必须在视图构造时设置?之后不能初始化吗?