ListView
各行が a と a で構成される がありTextView
ますCheckBox
。
ユーザーはそれぞれをクリックすることができ、クリックするTextView
とダイアログが表示され、[はい] または [いいえ] のいずれかを選択することが期待されます。
はいを選択すると、データを入力する必要がある別のアクティビティが表示されます。
これらすべてをベース アダプター クラス内に実装しているので、ベース アダプター内で を作成しAlertDialog
て処理しましたOnClickListeners
。
ここに問題がありstartActivityForResult
ます。ユーザーが新しいアクティビティに入力するデータを取得するために使用する必要があります。上で述べたように、BaseAdapter
. では、新しいアクティビティからデータを取得するにはどうすればよいBaseAdapter
ですか? さまざまなソースを調査したところ、BaseAdapter
クラスから直接 Intent を開始することはできず、代わりに以下のように Intent を呼び出しアクティビティに参照する必要があることがわかりました。
((Activity) mContext).startActivityForResult(intent, 1);
これにより、onActivityResult()
メソッドはアダプタ アクティビティ内にあり、 内にはありませんBaseAdapter
。BaseAdapter
さまざまな理由から 、コードを内部に残す必要があります。
取得する必要がある値は単純で、結果が true の場合、selected の隣にboolean
チェックマークを付けます。CheckBox
TextView
どうすればこれを実装できますか? 皆さんはどのような代替案を提案しますか? BaseAdapter
の「メイン」アクティビティから呼び出すことができるように、内部にメソッドを作成しようとしましたOnActivityResult()
が、CheckBox
チェックする必要があるのはその時点で null を返すことです。その理由は明らかです。
この問題について何か助けていただければ幸いです。
BaseAdapter クラスの内部
final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("Materials");
builder.setMessage("Did you require any materials to fix this error?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
String clickedError;
clickedError = holder.text.getText().toString();
Intent intent = new Intent(mContext, Material.class);
intent.putStringArrayListExtra("materialList", materialList);
intent.putExtra("clickedError", clickedError);
intent.putExtra("repairID", repairID);
((Activity) mContext).startActivityForResult(intent, 1);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
if(checkbox.getTag() == v.getTag())
{
checkbox.setChecked(true);
}
}
});
builder.show();
// Method to tick the checkbox.
public void TickBox(CheckBox cb)
{
cb.setChecked(true);
}
OnActivityResult() を含むメイン アクティビティ
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(resultCode == RESULT_OK)
{
boolean moreThanOne = data.getBooleanExtra("moreThanOne", false);
if(moreThanOne)
{
CheckBox cb = adapter.checkbox;
adapter.TickBox(cb);
}
else
{
// ....
}
}
}