Предустановка номера для Android - PullRequest
0 голосов
/ 10 февраля 2012

Это мой первый пост на stackoverflow, поэтому не стесняйтесь, дайте мне знать, если я делаю что-то не так.

Я работаю над созданием приложения для Android. Для одного из моих действий в меню мне нужен какой-то виджет, который позволит пользователю выбирать число из предопределенного набора. (т.е.: {50, 100, 200, 500, 1000, 2000})

Я посмотрел на виджеты Spinner, SeekBar и NumberPicker, и вот проблемы, с которыми я столкнулся.

  • Кажется, Spinner допускает только строки.
  • Похоже, что SeekBar и NumberPicker не могут легко использовать предустановленные значения.

Подойдет ли какой-нибудь из этих виджетов для того, что я пытаюсь сделать? Если нет, есть ли другой виджет, который может работать лучше? Если нет, то как бы вы посоветовали мне пойти по этому поводу?

Спасибо!

Edit:

Я пытался использовать спиннер и функцию 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)

В строке 20 PuzzleActivity я объявляю 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);

        }
    });

Основная активность (PuzzleActivity):

@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();
}

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Я бы лично использовал Spinner, а затем вызвал бы Integer.parseInt для получения результата, который вам нужен.

Хорошо, теперь с большим количеством вашего кода, пожалуйста, посмотрите на этот ответ (который использует строку, но то же самое для Integer), вы используете материал putExtra неправильно.

См. Как использовать putExtra () и getExtra () для строковых данных для получения дополнительной информации.

0 голосов
/ 14 февраля 2012

Я выяснил свою проблему.

Проблема заключается в этой строке:

int numPc = (Integer) savedInstanceState.get("numPc");

Я должен использовать что-то вроде этого:

Bundle extras = getIntent().getExtras();
int numPc = (Integer) extras.get("numPc");
...