LinearLayoutにチェックボックスを動的に追加しようとしています。私は次のコードを使用しました、
private class ListAdapters extends ArrayAdapter<ApplicationBean> {
private ArrayList<ApplicationBean> items;
private int position;
public ListAdapters(Context context, int textViewResourceId,
ArrayList<ApplicationBean> mTitleList) {
super(context, textViewResourceId, mTitleList);
this.items = mTitleList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
this.position = position;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.applicationlistitem, null);
}
final ApplicationBean o = (ApplicationBean) items.get(position);
if (o != null) {
txtAppName = (TextView) v.findViewById(R.id.app_name);
txtAppName.setText("" + o.getAppName());
launchButton = (Button) v.findViewById(R.id.launch_btn);
launchButton.setTag(position);
launchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final PackageManager pm = mContext.getPackageManager();
Intent LaunchIntent = pm
.getLaunchIntentForPackage(items
.get(Integer.parseInt(v.getTag()
.toString())).getPname());
mContext.startActivity(LaunchIntent);
}
});
rdgPassFail = (RadioGroup) v.findViewById(R.id.status_group);
rdgPassFail.setTag(position);
RadioButton passBtn = (RadioButton) v
.findViewById(R.id.pass_btn);
passBtn.setTag(position);
RadioButton failbtn = (RadioButton) v
.findViewById(R.id.fail_btn);
failbtn.setTag(position);
rdgPassFail
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group,
int checkedId) {
ApplicationBean o = (ApplicationBean) items
.get(Integer.parseInt(group.getTag()
.toString()));
switch (checkedId) {
case R.id.fail_btn:
Log.e("Fail button", "Clicked");
o.setFailState(true);
o.setPassState(false);
numOptions = 0;
Log.e("Fail button--1", "Clicked");
break;
case R.id.pass_btn:
Log.e("Pass button", "Clicked");
o.setFailState(false);
o.setPassState(true);
Log.e("Pass button-----1", "Clicked");
break;
}
items.set(Integer.parseInt(group.getTag()
.toString()), o);
}
});
Log.i("checkBoxFlag", "checkBoxFlag not true " + position);
LinearLayout featuresTable = (LinearLayout) v
.findViewById(R.id.failure_reasonslist);
for (int i = 0; i <= 5; i++) {
CheckBox feature1 = new CheckBox(this.getContext());
featuresTable.addView(feature1);
Log.i("Inside for loop", "creating check box " + position);
}
checkBoxFlag = true;
txtDescription = (EditText) v
.findViewById(R.id.description_text);
txtDescription.setTag(position);
if (txtDescription.isFocused()) {
InputMethodManager inputManager = (InputMethodManager) mContext
.getSystemService(INPUT_METHOD_SERVICE);
inputManager.restartInput(txtDescription);
}
txtDescription
.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
final EditText Caption = (EditText) v;
o.setDescription(Caption.getText()
.toString());
}
}
});
uninstallButton = (Button) v.findViewById(R.id.uninstall_btn);
uninstallButton.setTag(position);
// uninstallButton.setVisibility(View.INVISIBLE);
o.setUninstallVisible(false);
uninstallButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Uri packageUri = Uri.parse("package:"
+ items.get(
Integer.parseInt(v.getTag().toString()))
.getPname());
Intent uninstallIntent = new Intent(
Intent.ACTION_DELETE, packageUri);
uninstallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(uninstallIntent);
mTitleList.remove(items.get((Integer) v.getTag()));
mListView.setAdapter(new ListAdapters(mContext,
R.id.app_name, mTitleList));
((BaseAdapter) mListView.getAdapter())
.notifyDataSetChanged();
isUninstallclicked = true;
}
});
submitButton = (Button) v.findViewById(R.id.submit_btn);
submitButton.setTag(txtDescription);
submitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EditText tv = (EditText) v.getTag(); // get edittext
// object
txtDescription = tv;
if (txtTesterName.getText().toString().equals("")) {
showDialog("Please enter the name of tester",
mContext);
} else if (numOptions == 0) {
showDialog("Please select failure reason", mContext);
} else if (tv.getText().toString().equals("")) {
showDialog("Please enter the description", mContext);
} else if (!isNetworkAvailable()) {
showDialog(
"No network connection.Report won't be submitted",
mContext);
} else {
if (!o.isUninstallVisible()) {
uninstallButton.setVisibility(View.VISIBLE);
o.setUninstallVisible(true);
mListView.invalidate();
}
PostRequest p = new PostRequest(Integer.parseInt(tv
.getTag().toString()));
p.execute();
}
}
});
}
return v;
}
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return items.size();
}
}
コードによると、ビューには6つのチェックボックスがあります。しかし、6つ以上のチェックボックスをオンにしたとき。以下のログ(logcatからコピー)を見つけてください。ログも2回来ています。リストビューには他にもいくつかのコントロールがあります。それらはレイアウトxmlで定義されています。ただし、設計時にこれらのチェックボックスの数を制限することはできません。動的にロードしようとしています。誰か助けてもらえますか?
10:40:23.163: I/Inside for loop(440): creating check box 0
10:40:23.223: I/Inside for loop(440): creating check box 0
10:40:23.223: I/Inside for loop(440): creating check box 0
10:40:23.273: I/Inside for loop(440): creating check box 0
10:40:23.273: I/Inside for loop(440): creating check box 0
10:40:23.303: I/Inside for loop(440): creating check box 0
10:40:23.393: I/c
10:40:23.393: I/Inside for loop(440): creating check box 0
10:40:23.423: I/Inside for loop(440): creating check box 0
10:40:23.423: I/Inside for loop(440): creating check box 0
10:40:23.503: I/Inside for loop(440): creating check box 0
10:40:23.503: I/Inside for loop(440): creating check box 0
10:40:23.553: I/Inside for loop(440): creating check box 0