从标题中可能有点不清楚我想问什么,所以请允许我解释一下。
在我的项目中,我需要在while循环中创建动态视图。像这样;
private void loadCheckPointQuantity() {
final LinearLayout rgLayoutContainer = (LinearLayout)findViewById(R.id.quantityAnswers);
_answerCursor.moveToFirst();
while(_answerCursor.isAfterLast() == false) {
LinearLayout rgContainer = new LinearLayout(this);
rgContainer.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
rgContainer.setOrientation(LinearLayout.HORIZONTAL);
final ImageView checked = new ImageView(this);
checked.setMinimumHeight(30);
checked.setMinimumWidth(30);
if(_answerCursor.getInt(CPA_IS_CHECKED_COL) == 1) {
checked.setBackgroundResource(R.drawable.btn_check_buttonless_on);
} else {
checked.setBackgroundResource(R.drawable.ic_delete);
}
checked.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
TextView txtAmount = new TextView(this);
txtAmount.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
txtAmount.setText((_answerCursor.getPosition() + 1) + "/" + _answerCursor.getCount());
txtAmount.setTextSize(22);
RadioGroup rgAnswer = new RadioGroup(this);
rgAnswer.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
rgAnswer.setOrientation(RadioGroup.HORIZONTAL);
rgAnswer.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId) {
case 0:
checked.setBackgroundResource(R.drawable.ic_delete);
break;
case 1:
checked.setBackgroundResource(R.drawable.btn_check_buttonless_on);
break;
}
}
});
RadioButton rbYes = new RadioButton(this);
rbYes.setText(R.string.yes);
rbYes.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
rbYes.setId(1);
RadioButton rbNo = new RadioButton(this);
rbNo.setText(R.string.no);
rbNo.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
rbNo.setId(0);
ImageButton camButton = new ImageButton(this);
camButton.setImageResource(R.drawable.ic_menu_camera);
camButton.setLayoutParams(new LayoutParams(70, 70));
final EditText txtNote = new EditText(this);
txtNote.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
txtNote.setEnabled(false);
txtNote.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(!hasFocus) {
txtNote.setSingleLine(true);
} else {
txtNote.setSingleLine(false);
}
}
});
rgAnswer.addView(rbYes);
rgAnswer.addView(rbNo);
rgContainer.addView(checked);
rgContainer.addView(txtAmount);
rgContainer.addView(rgAnswer);
rgContainer.addView(camButton);
rgContainer.addView(txtNote);
rgLayoutContainer.addView(rgContainer);
if(_answerCursor.getInt(CPA_ANSWER_COL) == 1) {
rbYes.setChecked(true);
} else if(_answerCursor.getInt(CPA_ANSWER_COL) == 0) {
rbNo.setChecked(true);
}
if(_answerCursor.getInt(CPA_ANSWER_COL) == 0 || _answerCursor.getInt(CPA_ANSWER_COL) == 1) {
txtNote.setEnabled(true);
}
_answerCursor.moveToNext();
}
_answerCursor.moveToFirst();
}
会发生什么,数据库中有一个字段确定应该越过循环的次数。数量。因此,如果数量为5.组件应该制作5次。
问题是,
因为我在方法中做了所有这些,所以我无法访问各个视图。 例如,这也是现实中需要发生的事情;
我点击一个按钮。然后我需要将所有结果保存在数据库中。 即EditText和isChecked的radiogroup结果。
问题是,我不知道如何访问每个单独的视图。 我想到了几个要解决的问题。但他们最终都在我脑海上创造了问号
我试过,让一个班级代表答案(isChecked,note等等(带有getter和setter) 创建一个数组列表,将它们全部放在一个arraylist中。
这应该有效。将答案放在arraylist中。但这让我有了下一个问题。我的文字改变了什么?我怎么处理这个?
如果我使用observable,我应该使应答类可观察吗,我应该为每个成员调用setChanges(),并在包含loadCheckPointQuantity的类中实现observable吗?
我对观察者有正确的经验。
按下按钮时如何保存最新数据?
我绝对无能......
因为它可能含糊不清:
我尝试实现的目的:将所有视图中的最新数据保存到数据库中 方法:需要帮助 何时:点击按钮
您理解/查看/阅读此帖的时间非常受欢迎。回答更高。
如果您需要更多代码或解释。让我知道,我会尽我所能。
答案 0 :(得分:0)
我解决了我的问题。
我将eventlisteners分配给需要最终在数据库中结束的所有事情。 在焦点更改时,我将数据保存到数据库中。因此,我没有任何持有答案的清单。我即时更新数据库。不幸的是,它对性能不利。幸运的是,我们可以承受这种表现。
我尝试运行此代码告诉while循环执行3000次。除了视图生成需要一些时间(平均约3-4秒),一切都运行良好。所以我不需要跟踪方法之外生成的对象。 android / java为我做了这个。