2016-06-17 5 views
0

버튼을 누르면 작업이 추가됩니다. 다른 작업으로 (작업 이름, 내림차순, 양보 ... 등) 작업 세부 정보를 채우는 데 걸리는 시간이 있습니다. 저장시 작업 이름 만 첫 번째 활동으로 전송하여 목록보기에 저장해야합니다. 어떤 오류도 없지만 런타임 오류가 발생하면 (불행히도 응용 프로그램이 중지되었습니다) 발생합니다. 제발 도와주세요 !!처리 의도

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

충돌 그리고 경우 로그 캣을 포함하는 질문() .toString()'은 ** on ** 내부에 있어야합니다. 그렇지 않으면, 빈 문자열을 가지고 있습니다. –

+0

미안하지만 안드로이드에서 매우 초보자입니다. D 또 다른 질문입니다. 결과를 listview에 저장하고 싶다면 응용 프로그램을 닫고 열면 결과는 사용하는 것과 같을 것입니다. 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를 기능을 오버라이드 (override) 할 필요가 있습니다 두 번째 활동에서 첫 번째 활동으로 데이터를 반환 할 때 안드로이드 시스템에 의해 호출됩니다. 두 번째 활동에서

당신은()가 활동 스택에서이 활동을 제거하고 첫 번째로 돌아갈 첫 번째 활동에 확인됩니다 결과 코드를 설정하고 마무리를 호출 setResult 함수를 호출합니다. 배열 어댑터 인스턴스의 여부에 오류가있는 경우

는 ** 잘 모르겠어요. *

+0

완벽하게 나와 함께 작동 할 수! sooooooooooo 많이 U 감사합니다! – NAZXD

+0

@NAZXD 당신은 환영합니다 :) 있으며, 이 http://stackoverflow.com/help/someone-answers –

+0

나세르 미래의 질문에 도움이 될 수 있습니다 , 미안 해요 안드로이드에서 아주 초보자 : D 또 다른 질문 제발, 만약 내가 응용 프로그램을 닫고 결과를 사용하면 같은 결과가 될 것입니다 그래서 내가 listview에 결과를 저장 하시겠습니까? DB에 저장하거나 공유 환경 설정을 사용하거나 뭐라구? !! – NAZXD

0

을 당신은 onActivityResult에서 MainActivity를 오버라이드 (override) 할 필요가 있습니다.

그리고 intead addtask에서 startActivityForResult() 사용 setResult(Activity.RESULT_OK, intent); 당신의 addtask 활동에

+0

그게 작동하지 않습니다 !!! :( – NAZXD

0

당신이 수행해야합니다

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를 오버라이드 (override) 할 필요가 (당신이 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); 
     } 
    } 
}