2016-04-22 47 views
-1

我是Android新手。我想在我的应用程序中创建一个目录。我只会在那里显示名字。我正在使用Directory类来显示名称和AddPerson类以在其中添加。但AddPerson不起作用。这里是我的目录:使用startActivityForResult将数据添加到列表

 package com.example.user.myapplication; 

     import android.content.Intent; 
     import android.support.annotation.Nullable; 
     import android.support.v7.app.AppCompatActivity; 
     import android.os.Bundle; 
     import android.view.View; 
     import android.widget.ArrayAdapter; 
     import android.widget.Button; 
     import android.widget.EditText; 
     import android.widget.ImageButton; 
     import android.widget.ListView; 

     import java.util.ArrayList; 

     public class Directory extends AppCompatActivity { 
      ArrayList<String> personList = new ArrayList<>(); 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       ListView list; 
       ImageButton addButton; 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_directory); 
       list = (ListView) findViewById(R.id.listView); 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,android.R.id.text1, personList); 
       list.setAdapter(adapter); 
       addButton = (ImageButton)findViewById(R.id.imageButton5); 
       addButton.setOnClickListener(
         new View.OnClickListener() { 
          public void onClick(View v) { 
           Intent intent = new Intent("com.example.user.myapplication.AddPerson"); 
           startActivityForResult(intent, 1); 
          } 
         } 

       ); 

      } 

      @Override 
      protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
       super.onActivityResult(requestCode, resultCode, data); 
       if (requestCode == 1 && resultCode == RESULT_OK){ 
        String result=data.getStringExtra("result"); 
        personList.add(result); 
       } 
      } 

     } 

这是addPerson的类: 包com.example.user.myapplication;

import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 

    public class AddPerson extends AppCompatActivity { 
     Button addButton; 
     EditText nameText; 
     Directory d = new Directory(); 
     public String name; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_add_person); 
      addButton = (Button) findViewById(R.id.button); 
      addButton.setOnClickListener(
        new View.OnClickListener() { 
         public void onClick(View v) { 
          nameText = (EditText) findViewById(R.id.editText); 
          EditText mailText = (EditText) findViewById(R.id.editText2); 
          name = nameText.getText().toString(); 
          Intent returnIntent = new Intent(); 
          returnIntent.putExtra("result", name); 
          setResult(1, returnIntent); 
          finish(); 
         } 
        } 

      ); 

     } 
} 

回答

0

这如果总是假的,因为你正在返回1作为resultCode

if (requestCode == 1 && resultCode == RESULT_OK)

您需要与setResult(RESULT_OK, returnIntent);

返回正确的结果代码最重要的是,每个当你修改你的数据集时,你需要通知ListView的适配器它已经改变了。将适配器移至类变量,并在添加结果人员后调用adapter.notifyDataSetChanged();

+0

谢谢但它仍然不起作用 – aladinsane7

+0

你有没有试过通过并看到从第二个活动返回时会发生什么? – dharms

+0

对不起,我不明白你的意思 – aladinsane7

0

嗯,那伸出的最主要的是,你不使用RESULT_OK(或RESULT_CANCELED),也许尝试:

public void onClick(View v) { 
          nameText = (EditText) findViewById(R.id.editText); 
          EditText mailText = (EditText) findViewById(R.id.editText2); 
          name = nameText.getText().toString(); 
          Intent returnIntent = new Intent(); 
          returnIntent.putExtra("result", name); 
          setResult(Activity.RESULT_OK, returnIntent); 
          finish(); 

而且,你为什么手动创建一个目录(这是在活动这个上下文)在你的AddPerson活动中的对象?该系统是唯一应该创建活动的东西。

+0

我试过了,但仍然存在问题 – aladinsane7

0

使用setResult(Activity.RESULT_OK, returnIntent);

记得

INT RESULT_OK具有恒定值的值:-1(0xffffffff的)

,那么你就不会有问题将数据添加到列表:

@Override 
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {     
       if (requestCode == 1 && resultCode == RESULT_OK){ 
        String result=data.getStringExtra("result"); 
        personList.add(result); 
       } 
      } 
+0

我试过了,但仍然存在问题。不管怎样,谢谢你 – aladinsane7