我有ListView
,每行包含TextView
和CheckBox
。
允许用户点击每个TextView
,一旦他做了对话,就会向他显示,他应该选择是或否。
当他选择是时,会向他提供另一项活动,他需要输入数据。
我在基础适配器类中实现了所有这些,因此在基础适配器中我创建了AlertDialog
并处理了它OnClickListeners
。
问题在于:我需要使用startActivityForResult
来获取用户将在新活动中输入的数据,就像我上面所说的那样,我在{{1}中这样做了}。现在,如何从BaseAdapter
内的新活动中获取数据?我研究了各种来源,发现不能直接从BaseAdapter
类启动Intent,而是需要将Intent引用到调用活动,如下所示:
BaseAdapter
这将导致在适配器Activity中使用((Activity) mContext).startActivityForResult(intent, 1);
方法而不在onActivityResult()
内。
出于各种原因,我需要将代码保留在BaseAdapter
内。
我需要检索的值是一个简单的BaseAdapter
,如果结果为true,则会勾选所选boolean
旁边的CheckBox
。
我怎么能实现这个?你们有什么选择吗?我尝试在TextView
中创建一个方法,以便我可以在BaseAdapter
的“主”活动中调用它,但我需要勾选的OnActivityResult()
在此时返回null;原因很明显。
我很感激有关此事的任何帮助。
Inside BaseAdapter class
CheckBox
包含OnActivityResult()
的主要活动 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);
}
答案 0 :(得分:0)
在BaseAdaper中创建一个Callback侦听器,在该方法中写入Intent代码,
稍后更新它在BaseAdapter中创建一个方法,该方法将从onActivityResult调用。
答案 1 :(得分:-1)
你可以从你的活动中更新你的复选框....试试这个
当用户点击列表视图时,将listItem位置发送到您的新活动。并在onActivityResult中返回旧活动中的相同值。
然后在onActivityResult **
使用与创建listView时使用的相同布局
RelativeLayout itemLayout = (RelativeLayout)mListViewObject.getChildAt(i);
CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.checkBox);
cb.setChecked(RESULT);