0

私は自分の問題を解決することに完全に立ち往生しています。私はそれを成し遂げるためにすべての可能な方法を試みましたが、無駄でした。どうか、誰かが次のコードを見て助けてくれます...私はandroid/java環境に不慣れです。

結果としてアクティビティBをトリガーするアクティビティAがあります。アクティビティBは、ユーザーがフォームに入力し、フォームの[保存]ボタンを押して送信する必要があるフォームです。フォームのデータはデータベースに保存され(正常に機能しています)、アクティビティBは文字列(ユーザーが提供)を使用してアクティビティAに戻ります。

アクティビティAに戻ったら、リストビューをその文字列の値で更新する必要があります。

これが私のコードです:

Aからインテントを開始するには:

 Intent ccard_intent= new Intent(this, create_ccard.class);
 startActivityForResult(ccard_intent,start_activity_for_ccard);
break;

上記のコードは正常に機能します。アクティビティBが開始されます(ユーザーが入力するフォームがあります)

アクティビティBでは、ユーザーがフォームに入力した後、保存ボタンを押します。エントリはDbに保存され、特定のエントリに名前を付けるようにユーザーに求めます。私はその目的のためにalertdialogを使用しました。ここで、データベースのエントリには、alertdialogでユーザーが指定した名前(文字列)が含まれていることに注意してください。同じ文字列をアクティビティAに渡す必要があります。

[保存]ボタンをクリックした後の私のコード:

case R.id.Ccard_save_btn:

     //do operations 

 CcardString =myobj.toString();

AlertDialog.Builder save_btn_builder = new AlertDialog.Builder(this);
save_btn_builder.setTitle("Enter the Card Name");
final EditText input= new EditText(this);
  save_btn_builder.setView(input);

  save_btn_builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub

        Card_name=input.getText().toString();
        myDatabse mydb = new myDatabse(getBaseContext());
        mydb.open();
          mydb.insertCard(Card_name, type, CcardString);

          mydb.close();


    //i have intent declared at the begining along with along with Card_name

        i.putExtra("card_name", Card_name);

        setResult(Activity.RESULT_OK);


        finish();
    }
});

  save_btn_builder.show();

これで、インテントはアクティビティAに正常に戻りますが、「card_name」にnull値が含まれています。なぜかわからない???

これで、onActivityResultコードは次のようになります。

  protected void onActvityResult(int requestCode, int resultCode, Intent data){

    super.onActivityResult(requestCode, resultCode, data);

Log.d("activity ccards", "in on activity resume");
    if(requestCode == 788 && resultCode== RESULT_OK){
 new_ccard = data.getStringExtra("card_name");
     ccards_arraylist.add(new_ccard);

    adapter3.notifyDataSetChanged();

    //adapter3 is the adapter for the listview
    }

}
4

1 に答える 1

0

変数入力に値を設定したことはありません。では、どのように:

Card_name=input.getText().toString();

値を返しますか?

あなたはこのようなことを試すことができます:

input.addTextChangedListener(new TextWatcher()
{

    public void afterTextChanged(Editable s)
    {

    }

    public void beforeTextChanged(CharSequence s, int start,
    int count, int after)
    {

    }

    public void onTextChanged(CharSequence s, int start,
    int before, int count)
    {
        Card_name=input.getText().toString();
    }
});

変更されたテキスト値を取得するには、textWatcherが必要です。それ以外の場合はnullになります。

于 2013-03-03T12:31:05.513 に答える