2012-03-01 58 views
2

我在布局中动态添加一个微调器,如下所示;如何从动态添加的微调器中选择一个项目?

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) { 
    } 
} 

但是,当我点击微调,我的应用程序崩溃,我得到以下错误。

03-01 11:40:31.864: ERROR/AndroidRuntime(31327): FATAL EXCEPTION: main 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327): android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.view.ViewRoot.setView(ViewRoot.java:562) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:179) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.view.Window$LocalWindowManager.addView(Window.java:433) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.app.Dialog.show(Dialog.java:265) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.app.AlertDialog$Builder.show(AlertDialog.java:802) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.widget.Spinner.performClick(Spinner.java:260) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.view.View$PerformClick.run(View.java:9320) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.os.Handler.handleCallback(Handler.java:587) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.os.Looper.loop(Looper.java:150) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at android.app.ActivityThread.main(ActivityThread.java:4385) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at java.lang.reflect.Method.invoke(Method.java:507) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
03-01 11:40:31.864: ERROR/AndroidRuntime(31327):  at dalvik.system.NativeStart.main(Native Method) 

我不知道,如何选择微调器中的项目或如何使微调器可选或可点击。

注意:我的这项活动是我的ActivityGroup中的一项活动。 请帮我解决这个问题。谢谢!

+0

向我们展示了充分的活动 – waqaslam 2012-03-01 07:01:24

+0

同样的事情发生,如果我把在年底

Spinner spin = new Spinner(this); 

尝试。 – aiRbornE 2012-03-01 07:03:05

+0

哪一行指示logcat出错? – Hiral 2012-03-01 07:05:02

回答

0

您的logcat说android.view.WindowManager$BadTokenException这意味着您在某处传递了无效的上下文。

我怀疑这条线使用Spinner spin=new Spinner(YourActivity.this)Spinner spin=new Spinner(getApplicationContext())

+0

你说得对。它解决了我的问题,而不是给出这个,我应该给我的ActivityGroup的上下文。谢谢! – aiRbornE 2012-03-01 11:46:00

0

使用微调器很容易和简单。我会告诉你一步一步的步骤 1.让你的布局微调或动态添加它。 像下面Spinner brand=new Spinner;并修复它的任何布局 但如果ü添加此静态你的布局,然后做这个 brand=(Spinner)findViewById(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.select任何项目从微调

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

这是关于微调。

0

你正在编写非常复杂的代码,这可能有助于

添加您的数据ArrayList和使用它像下面

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

,并从你的记录使用获得的ID或任何领域

int id = proarray.get(spn.getSelectedItemPosition()).id; 

或执行器

onitemSelectedListener() 

并将选定的位置传递给上方。

相关问题