1

ListView各行が a と a で構成される がありTextViewますCheckBox

ユーザーはそれぞれをクリックすることができ、クリックするTextViewとダイアログが表示され、[はい] または [いいえ] のいずれかを選択することが期待されます。

はいを選択すると、データを入力する必要がある別のアクティビティが表示されます。

これらすべてをベース アダプター クラス内に実装しているので、ベース アダプター内で を作成しAlertDialogて処理しましたOnClickListeners

ここに問題がありstartActivityForResultます。ユーザーが新しいアクティビティに入力するデータを取得するために使用する必要があります。上で述べたように、BaseAdapter. では、新しいアクティビティからデータを取得するにはどうすればよいBaseAdapterですか? さまざまなソースを調査したところ、BaseAdapterクラスから直接 Intent を開始することはできず、代わりに以下のように Intent を呼び出しアクティビティに参照する必要があることがわかりました。

((Activity) mContext).startActivityForResult(intent, 1);        

これにより、onActivityResult()メソッドはアダプタ アクティビティ内にあり、 内にはありませんBaseAdapterBaseAdapterさまざまな理由から 、コードを内部に残す必要があります。

取得する必要がある値は単純で、結果が true の場合、selected の隣にbooleanチェックマークを付けます。CheckBoxTextView

どうすればこれを実装できますか? 皆さんはどのような代替案を提案しますか? 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

-1

あなたはあなたの活動からあなたのチェックボックスを更新することができます....これを試してください

ユーザーがリストビューをクリックすると、listItem の位置が新しいアクティビティに送信されます。また、古いアクティビティの同じ値が 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 に答える