Android 如何从动态添加的微调器中选择项目?

Android 如何从动态添加的微调器中选择项目?,android,drop-down-menu,spinner,Android,Drop Down Menu,Spinner,我在布局中动态添加微调器,如下所示 public class FRQuestionsDetail extends Activity implements OnClickListener, OnItemSelectedListener { private TextView tvCategoryType; private TextView tvCategoryObtainScore; private TextView tvCategoryTotalSc

我在布局中动态添加微调器,如下所示

   public class FRQuestionsDetail extends Activity implements OnClickListener,
        OnItemSelectedListener {

    private TextView tvCategoryType;
    private TextView tvCategoryObtainScore;
    private TextView tvCategoryTotalScore;
    private TextView tvQuestionNumber;
    private TextView tvQuestionPercent;
    private TextView tvQuestion;

    private Button btnNextQuestion;
    private Button btnPrevQuestion;
    private LinearLayout linearDynamicQuesOptions;

    private int scoringType;
    private int reviewId;
    private int reviewLocationId;
    private int reviewCategoryId;
    private int questionId;
    private int count = 0;
    private int position;
    private long categoryScore;
    private long questionScore;;
    private String reviewCategoryType;
    private String question;

    private ArrayAdapter<String> qOptionsAdapter;

    private static ArrayList<FRReviewQuestions> questionsList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.question_detail_page);

        tvCategoryType = (TextView) findViewById(R.id.tv_category_type_q_detail);
        tvCategoryObtainScore = (TextView) findViewById(R.id.tv_category_score_obtain_q_detail);
        tvCategoryTotalScore = (TextView) findViewById(R.id.tv_category_score_total_q_detail);
        tvQuestionNumber = (TextView) findViewById(R.id.tv_question_number);
        tvQuestionPercent = (TextView) findViewById(R.id.tv_question_percent);
        tvQuestion = (TextView) findViewById(R.id.tv_question);

        btnNextQuestion = (Button) findViewById(R.id.btn_nextQuestion);
        btnPrevQuestion = (Button) findViewById(R.id.btn_prevQuestion);
        linearDynamicQuesOptions = (LinearLayout) findViewById(R.id.ll_dynamic_options);

        btnNextQuestion.setOnClickListener(this);
        btnPrevQuestion.setOnClickListener(this);

        SharedPreferences savedReviewPref = getSharedPreferences(
                Configuration.START_REVIEW, MODE_WORLD_READABLE);
        scoringType = savedReviewPref.getInt(
                Configuration.REVIEW_TEMPLATE_SCORING_TYPE, 0);

        Bundle extras = getIntent().getExtras();
        reviewLocationId = extras.getInt("reviewLocationId");
        reviewId = extras.getInt("reviewId");
        reviewCategoryId = extras.getInt("reviewCategoryId");
        reviewCategoryType = extras.getString("reviewCategoryType");
        questionId = extras.getInt("questionId");
        categoryScore = extras.getLong("categoryScore");
        questionScore = extras.getLong("questionScore");
        position = extras.getInt("position");
        question = extras.getString("question");
        position = position + 1;
        questionsList = getQuestionDbContent();
        count = FRReviewQuestionsTable.countQuestions;

        tvCategoryType.setText(reviewCategoryType);

        if (scoringType == 3) {
            tvCategoryTotalScore.setText("(" + categoryScore + "%)");
            // tvQuestionPercent.setText(" (" + questionScore + "%)" );
        } else if (scoringType == 2) {
            tvCategoryTotalScore.setText("(" + categoryScore + ")");
            // tvQuestionPercent.setText(" (" + questionScore + ")" );
        } else if (scoringType == 1) {
            tvCategoryTotalScore.setText(" ");
            // tvQuestionPercent.setText(" ");
        }

        drawQuestion(position);
        // tvQuestionNumber.setText(" " + position + " of " + count);
        // tvQuestion.setText(question);
    }

    private ArrayList<FRReviewQuestions> getQuestionDbContent() {
        ArrayList<FRReviewQuestions> arrayQuestions = new ArrayList<FRReviewQuestions>();

        FRReviewQuestionsTable db = new FRReviewQuestionsTable(
                FRQuestionsDetail.this);
        arrayQuestions = db
                .getReviewQuestionWrtIdFromDB(
                        "review_question_id,review_question_category_id,review_question,review_question_type,review_question_is_pic_req,review_question_score,review_question_is_deleted,review_question_is_ans_req,review_question_max_length,review_question_last_sync_date",
                        reviewCategoryId);
        db.CloseDB();

        return arrayQuestions;
    }

    public void drawQuestion(int index) {
        FRReviewQuestions questions = new FRReviewQuestions();
        questions = questionsList.get(index - 1);
        String ques = questions.getReviewQuestion();
        int quesId = questions.getReviewQuestionId();
        int isAnsReq = questions.getIsAnsReq();
        int questionType = questions.getQuestionType();
        long maxLength = questions.getMaxLength();
        long questionScore = questions.getQuestionScore();

        if (scoringType == 3) {
            tvQuestionPercent.setText(" (" + questionScore + "%)");
        } else if (scoringType == 2) {
            tvQuestionPercent.setText(" (" + questionScore + ")");
        } else if (scoringType == 1) {
            tvQuestionPercent.setText(" ");
        }

        tvQuestionNumber.setText(" " + index + " of " + count);
        tvQuestion.setText(ques);

        if (questionType == 1) {
            dropDownQuestion(quesId);
        } else if (questionType == 2) {

        } else if (questionType == 3) {

        } else if (questionType == 4) {

        } else {

        }
    }

    private void dropDownQuestion(int quesId) {
        ArrayList<FRQuestionOptions> arrayQuestionOptions = new ArrayList<FRQuestionOptions>();
        arrayQuestionOptions = getQuestionOptionsDbContent(quesId);

        Spinner spin = new Spinner(this);
        spin.setClickable(true);
        // spin.setContentDescription("Select");
        spin.setPrompt("Select");
        spin.setOnItemSelectedListener(this);

//      linearDynamicQuesOptions.addView(spin, new LinearLayout.LayoutParams(
//               LinearLayout.LayoutParams.MATCH_PARENT,
//               LinearLayout.LayoutParams.WRAP_CONTENT));

        qOptionsAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_dropdown_item);
        qOptionsAdapter
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(qOptionsAdapter);

        int len = arrayQuestionOptions.size();
        FRQuestionOptions qOptions;
        for (int i = 0; i < len; i++) {
            qOptions = arrayQuestionOptions.get(i);
            String value = qOptions.getValue();
            qOptionsAdapter.add(value);
            qOptionsAdapter.notifyDataSetChanged();
        }

         linearDynamicQuesOptions.addView(spin, new LinearLayout.LayoutParams(
         LinearLayout.LayoutParams.MATCH_PARENT,
         LinearLayout.LayoutParams.WRAP_CONTENT));
    }

    public void onClick(View v) {
        if (v == btnNextQuestion) {

        } else if (v == btnPrevQuestion) {

        }
    }

    private ArrayList<FRQuestionOptions> getQuestionOptionsDbContent(
            int questionId) {
        ArrayList<FRQuestionOptions> arrayQuestionOptions = new ArrayList<FRQuestionOptions>();

        FRQuesOptionsTable db = new FRQuesOptionsTable(FRQuestionsDetail.this);
        arrayQuestionOptions = db
                .getReviewQuestionWrtIdFromDB(
                        "option_id,question_id,question_score,question_value,question_is_deleted,question_last_sync_date",
                        questionId);
        db.CloseDB();

        return arrayQuestionOptions;
    }

    public void onItemSelected(AdapterView<?> arg0, View view, int position,
            long id) {
    }

    public void onNothingSelected(AdapterView<?> arg0) {
    }
}
我不知道如何在微调器中选择项目,或者如何使微调器可选择或可单击

注意:我的此活动是我的活动组中的活动之一。
请帮我解决这个问题。谢谢大家!

使用微调器简单易行。我会一步一步地告诉你 1.在布局上使用该微调器或动态添加它。 如下所示
Spinner品牌=新的Spinner并将其固定在任何布局上
但是如果你在你的布局上静态地添加这个,那么就这样做
brand=(微调器)findviewbyd(R.id.brand)

2.在数组中添加要显示的项

array_spinner=new String[4];
   array_spinner[0]="BFT";
   array_spinner[1]="GFP";
   array_spinner[2]="FSS";
   array_spinner[3]="others";
3.从微调器中选择任何项目

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, array_spinner);
          brand.setAdapter(adapter);

这都是关于微调器的。

使用微调器很简单。我会一步一步地告诉你 1.在布局上使用该微调器或动态添加它。 如下所示
Spinner品牌=新的Spinner并将其固定在任何布局上
但是如果你在你的布局上静态地添加这个,那么就这样做
brand=(微调器)findviewbyd(R.id.brand)

2.在数组中添加要显示的项

array_spinner=new String[4];
   array_spinner[0]="BFT";
   array_spinner[1]="GFP";
   array_spinner[2]="FSS";
   array_spinner[3]="others";
3.从微调器中选择任何项目

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, array_spinner);
          brand.setAdapter(adapter);

这都是关于微调器的。

您正在编写非常复杂的代码,这可能会有所帮助

将您的数据添加到arraylist并按如下方式使用

ArrayList<Client > proarray;
Spinner spn = (Spinner)findViewById(R.id.spn);
spn.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arr));  
或实施

onitemSelectedListener()

并将所选位置传递到上面

您正在编写非常复杂的代码,这可能会有所帮助

将您的数据添加到arraylist并按如下方式使用

ArrayList<Client > proarray;
Spinner spn = (Spinner)findViewById(R.id.spn);
spn.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arr));  
或实施

onitemSelectedListener()

并将所选位置传递到上面

您的日志显示的是
android.view.WindowManager$BadTokenException
,这意味着您正在某个地方传递无效的上下文

我怀疑这条线

 Spinner spin = new Spinner(this);

尝试使用
Spinner spin=new Spinner(YourActivity.this)
Spinner spin=new Spinner(getApplicationContext())
您的日志显示的是
android.view.WindowManager$BadTokenException
,这意味着您在某处传递了无效的上下文

我怀疑这条线

 Spinner spin = new Spinner(this);

尝试使用
Spinner spin=new Spinner(YourActivity.this)
Spinner spin=new Spinner(getApplicationContext())

如果我把它放在末尾,同样的事情也会发生。哪一行表示logcat中有错误?没有,因为它没有在视图中添加窗口。@Hiral,谢谢你的建议,我做到了。同样的事情也会发生,如果我把它放在最后。哪一行表示logcat中有错误?没有,因为它没有在视图中添加窗口。@Hiral,谢谢你的建议,我这样做了。你是对的。它解决了我的问题,因为我应该给出我的活动组的上下文,而不是给出这个。非常感谢。你说得对。它解决了我的问题,因为我应该给出我的活动组的上下文,而不是给出这个。非常感谢。