我有 a ListView
,每行由 aTextView
和 a组成CheckBox
。
用户可以点击每一个TextView
,一旦他点击,就会出现一个对话框,他应该选择是或否。
当他选择是时,将向他显示另一个活动,他需要在其中输入数据。
我在基适配器类中实现所有这些,所以在基适配器中我创建AlertDialog
并处理了OnClickListeners
.
这就是问题所在:我需要使用startActivityForResult
才能取回用户将在新活动中输入的数据,就像我上面所说的那样,我已经在BaseAdapter
. 现在,我怎样才能从新活动中获取数据BaseAdapter
?我研究了各种来源,发现不能直接从BaseAdapter
类启动 Intent,而是需要将 Intent 引用到调用活动,如下所示:
((Activity) mContext).startActivityForResult(intent, 1);
这将导致该onActivityResult()
方法在适配器 Activity 中而不是在BaseAdapter
. BaseAdapter
由于各种原因, 我需要将代码留在里面。
我需要检索的值很简单boolean
,如果结果为真,则会CheckBox
在 selected 旁边打勾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
{
// ....
}
}
}