1

我有 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
        {
            // ....
        }
    }       
}   
4

2 回答 2

0

在 BaseAdaper 中创建一个回调侦听器,在该方法中编写 Intent 代码,

稍后更新它在 BaseAdapter 中创建一个方法,该方法将从 onActivityResult 调用。

于 2013-08-21T08:55:04.357 回答
-1

你可以从你的活动中更新你的复选框......试试这个

当用户单击列表视图时,将列表项位置发送到您的新活动。并在 onActivityResult 中的旧活动中返回相同的值。

然后在 onActivityResult **

使用与创建 listView 时相同的布局

RelativeLayout itemLayout = (RelativeLayout)mListViewObject.getChildAt(i);
                   CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.checkBox);
                   cb.setChecked(RESULT);
于 2013-08-21T08:43:00.657 回答