这是我在stackoverflow上的第一篇文章,所以如果我做错了什么,请随时告诉我。
我正在制作一个安卓应用程序。对于我的一个菜单活动,我需要某种小部件,允许用户从预定义的集合中选择一个数字。(即:{5010020050001000})
我查看了Spinner、SeekBar和NumberPicker小工具,下面是我发现的每个小工具的问题。
- Spinner似乎只允许字符串
- SeekBar和NumberPicker似乎不容易允许预设值
这些小部件中的任何一个都能满足我的要求吗?如果没有,是否还有其他小部件可以更好地工作?如果没有,你会建议我怎么做?
谢谢!
编辑:
我尝试使用微调器和Integer.parseInt
函数。我得到一个空指针异常:
02-11 18:21:23.823: E/AndroidRuntime(359): Caused by: java.lang.NullPointerException
02-11 18:21:23.823: E/AndroidRuntime(359): at com.Package.Jigsaw.PuzzleActivity.onCreate(PuzzleActivity.java:20)
PuzzleActivity的第20行是我声明numPc的地方。
以下是相关的代码位:
菜单活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_puzzle);
//final Gallery gal = (Gallery) findViewById(R.id.opt_img);
final Spinner numPc = (Spinner) findViewById(R.id.opt_numpc);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.opt_numpc_options, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
numPc.setAdapter(adapter);
...snip...
Button start_btn = (Button) findViewById(R.id.start_puzzle_btn);
start_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i = new Intent("us.kniffin.Jigsaw.OPENPUZZLE");
//i.putExtra("img", gal.getSelectedItem());
//i.putExtra("numPc", numPc.getSelectedItem());
i.putExtra("numPc", Integer.parseInt(numPc.getSelectedItem().toString()));
//i.putExtra("rot", rot.getSelectedItem().toString());
//i.putExtra("connType", connType.getSelectedItem().toString());
startActivity(i);
}
});
主要活动(谜题活动):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final PuzzleView v;
Dimension numPcXY;
// TODO: update this line to read in options
int numPc = (Integer) savedInstanceState.get("numPc");
// TODO: update this line to read in options
picture = BitmapFactory.decodeResource(getResources(), R.drawable.test_pic);
picture = Bitmap.createScaledBitmap(picture, picture.getWidth()/3, picture.getHeight()/3, false);
// Do some math to do a case statement to determine numPcX and numPcY
numPcXY = calcXYpieces(numPc, picture);
// Create the puzzle
pieces = new PuzzlePieceSet(picture, numPcXY.getX(), numPcXY.getY());
v = new PuzzleView(this, pieces);
setContentView(v);
pieces.scramble();
}
我个人会使用Spinner,然后对结果调用Integer.parseInt来获得所需的int。
好的,现在有了更多的代码,请看看这个答案(它使用了一个字符串,但对Integer来说是一样的),你使用的putExtra东西不正确。
有关详细信息,请参阅如何对字符串数据使用putExtra()和getExtra(。
我解决了我的问题。
问题在于这一行:
int numPc = (Integer) savedInstanceState.get("numPc");
我应该使用这样的东西:
Bundle extras = getIntent().getExtras();
int numPc = (Integer) extras.get("numPc");