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,谢谢你的建议,我这样做了。你是对的。它解决了我的问题,因为我应该给出我的活动组的上下文,而不是给出这个。非常感谢。你说得对。它解决了我的问题,因为我应该给出我的活动组的上下文,而不是给出这个。非常感谢。