BaseAdapter中的难度勾选复选框

时间:2013-08-21 08:05:45

标签: android android-intent baseadapter android-checkbox

我有ListView,每行包含TextViewCheckBox

允许用户点击每个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);
}

2 个答案:

答案 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);