2016-06-17 3 views
0

私はそれを押すと、(タスク名、desc、duedate..etc)のようなタスクの詳細を入力する別のアクティビティに移動します。タスク名を最初のアクティビティに転送してリストビューに保存する必要があります。私はエラーはありませんが、(残念なことに、アプリケーションが停止しました)実行時エラーが発生します。私を助けてください !!取り扱いの意図

public class MainActivity extends AppCompatActivity { 

    Button add; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     add = (Button) findViewById(R.id.add); 
     add.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(v.getContext(),addtask.class); 
       startActivityForResult(i,0); 
      } 


     }); 

     Intent intent= getIntent(); 
     String task= intent.getStringExtra("task"); 


     ArrayList<String> mylist=new ArrayList<String>(); 
     ListView lv=(ListView) findViewById(R.id.listview); 

     mylist.add(task); 
     ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,R.layout.activity_main,R.id.listview, mylist); 
     lv.setAdapter(adapter); 

    }} 

と私の第二のクラス(activity2)

public class addtask extends Activity { 
    Button save; 
    EditText tasktxt; 
    public static String task; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dolist); 
     tasktxt= (EditText) findViewById(R.id.tasktxt); 
     task= tasktxt.getText().toString(); 
     save= (Button) findViewById(R.id.save); 

     save.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(addtask.this,MainActivity.class);// define the intent 
       intent.putExtra("task",task); // store the message in "message" 
       startActivityForResult(intent,0); // calling the other activity 
      } 
     }); 

    } 
} 
+0

してください[編集]あなたのアプリが 'tasktxt.getTextを –

+0

をクラッシュした場合logcatを含むようにあなたの質問() .toString() 'は** on **の中の' onClick'でなければなりません。そうでなければ、空の文字列 –

+0

が残っていますが、私は非常に初心者です。私はリストビューに結果を保存したいと思っています。アプリケーションを閉じて開いた場合、結果は同じになります。それらをdbに保存するか、共有の環境設定を使用するか、何を使用しますか? – NAZXD

答えて

0

I thi NKあなた最初の活動はこのようなことができます:

Button add; 
    ListView lv; 
    ArrayList<String> mylist=new ArrayList<String>(); 
    ArrayAdapter<String> adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     add = (Button) findViewById(R.id.add); 
     lv=(ListView) findViewById(R.id.listview); 

     adapter=new ArrayAdapter<String> 
     (MainActivity.this,R.layout.activity_main,R.id.listview, mylist); 
     lv.setAdapter(adapter); 


     add.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(v.getContext(),addtask.class); 
       startActivityForResult(i,0); 
      }); 
    } 

    @Override //to receive result 
    protected void onActivityResult(int requestCode, int resultCode, Intent  
    data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (requestCode == 0) { 
       if (resultCode == RESULT_OK) { 
        //Use data intent to get string 
        String task = data.getStringExtra("task"); 

        //adding new task 
        mylist.add(task); 
        arrayAdapter.notifyDataSetChanged(); 
       } 
      } 
     } 
    } 

そしてセカンド活動をこのようなこと:

public class addtask extends Activity { 
    Button save; 
    EditText tasktxt; 
    public static String task; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dolist); 
     tasktxt= (EditText) findViewById(R.id.tasktxt); 
     task= tasktxt.getText().toString(); 
     save= (Button) findViewById(R.id.save); 

     save.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(addtask.this,MainActivity.class); 
       //define the intent 
       intent.putExtra("task",task); 

       setResult(RESULT_OK, intent); 
       finish(); 
      } 
     }); 
    } 

をフリストアクティビティでは、この関数としてonActivityResult機能をオーバーライドする必要があります2番目のアクティビティから最初のアクティビティにデータを返すときにアンドロイドシステムによって呼び出されます。第二の活動に

あなたは最初のアクティビティにチェックされます結果コードを設定し、活動スタックからこのアクティビティを削除し、最初の1に戻り仕上げ()を呼び出すためにsetResult関数を呼び出します。ご使用のアレイアダプタのインスタンス化やないエラーがある場合

**は私はわからない。*

+0

は完全に私と一緒に動作する!! soooooooooooくらいのuをありがとうございました! – NAZXD

+0

@NAZXD あなたは歓迎:)あり、 これはあなたの未来の質問 http://stackoverflow.com/help/someone-answers –

+0

ナセルのために役立つかもしれません、申し訳ありませんが、私は非常に初心者アンドロイドで:D別の質問ください、私は、アプリケーションを閉じて、結果を同じものを使用する必要がありますので、結果をリストビューに保存したい場合は?それらをdbに保存するか、共有の環境設定を使用するか、何を使用しますか? – NAZXD

0

あなたはMainActivityonActivityResultをオーバーライドする必要があります。

そしてinteadあなたが行う必要があり、あなたのaddtask活動にaddtask

+0

それはうまくいきません! :( – NAZXD

0

startActivityForResult()使用setResult(Activity.RESULT_OK, intent);の:

save.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     Intent returnIntent = new Intent(); 
     returnIntent.putExtra("task",task); // store the message in "message" 
     setResult(Activity.RESULT_OK,returnIntent); 
     finish(); 
    } 
}); 

次に、あなたのMainActivityにあなたがonActivityResultをオーバーライドする必要があります(あなたがそこaddtaskから意図を取得します):

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 0) { 
     if(resultCode == Activity.RESULT_OK){ 
      // You can remove this code from onCreate 
      String task= data.getStringExtra("task"); 

      ArrayList<String> mylist=new ArrayList<String>(); 
      ListView lv=(ListView) findViewById(R.id.listview); 
      mylist.add(task); 
      ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,R.layout.activity_main,R.id.listview, mylist); 
      lv.setAdapter(adapter); 
     } 
    } 
}