如何在android中逐个显示列表中另一个活动的一个活动中输入的数据?

时间:2015-01-09 06:14:12

标签: java android

FirstActivity.java

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    etName = (EditText) findViewById(R.id.etName);
    btnOk = (Button) findViewById(R.id.btnOk);

    btnOk.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

            Name = etName.getText().toString();
            Intent intent = new Intent(getApplicationContext(),
                    SecondActivity.class);
            // Create a bundle object
            intent.putExtra("NAME", Name);

            startActivity(intent);
        }
    });

我的Second Activity.java如下:

ArrayList<String> list = new ArrayList<String>();
ArrayAdapter<String> adapter;
String UName;
String iName;
ListView lvName;
Button btnBack;

Bundle savedInstanceState;

@Override
protected void onCreate(Bundle b) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listview);

    b = getIntent().getExtras();
    lvName = (ListView) findViewById(R.id.lvNames);
    btnBack = (Button) findViewById(R.id.btnBack);

    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, list);


    UName=b.getString("NAME");


    list.add(UName);
    adapter.notifyDataSetChanged();
    lvName.setAdapter(adapter);


    lvName.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            String item = ((TextView)view).getText().toString();



            Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();

            Intent intent = new Intent(getApplicationContext(),
                    ThirdActivity.class);
            // Create a bundle object
            intent.putExtra("ITEMNAME", item);

            startActivity(intent);

        }
    });


    btnBack.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

             Intent intent = new Intent(getApplicationContext(),
                        MainActivity.class);
             startActivity(intent);

        }
    });


}

我的问题是每当我点击后退按钮时,活动就会重新启动。这样列表中的第一项就会被第二项覆盖。我希望在第二个活动中将输出作为列表(逐个项目),无论我在第一个活动中输入什么数据。我怎么能这样做?

例如,当我在edittext中输入ABC时,它在列表中显示相同的数据ABC。很好。 但是,当我点击后退按钮并再次输入edittext中的任何数据时,它不会将数据显示为列表中的第二项,但它已经过了写第一项。这是我想要解决的问题......

4 个答案:

答案 0 :(得分:0)

您只需在应用中的某个位置创建全局列表,就像您可以创建Singletone或Application Class一样,您必须存储用户名列表。

在下面的代码中,你必须在第一个活动中更新你的arrayList,你必须在SecondActivity中获取你的nameList

public class MySingleton
{
    private static MySingleton _instance;
    private ArrayList<String> nameList;

    private MySingleton()
    {

    }

    public static MySingleton getInstance()
    {
        if (_instance == null)
        {
            _instance = new MySingleton();
        }
        return _instance;
    }

   public ArrayList<String> getNameList(){
      return nameList;
   }

    public void setNameList(ArrayList<String> nameList(){
       nameList = nameList;
    }
}

答案 1 :(得分:0)

您可以在第一项活动中将所有项目置于意图中:

intent.putStringArrayListExtra(ITEMS, list);

然后你可以在第二个活动中从意图中提取它们:

List<String> items = getIntent().getStringArrayListExtra(ITEMS);

答案 2 :(得分:0)

使用extends Application类

public class MyGlobal extends Application {
public ArrayList<String> selectedAppsPackageNames = new ArrayList<String>();
}

在您的活动中获取此信息

private MyGlobal mMyGlobal = (MyGlobal) getApplicationContext();

在应用程序标记内的清单中声明(给出路径)

<application
android:name="com.afbb.lockaddicted.core.MyControlList"
..............
.........
</application>

答案 3 :(得分:0)

您可以使用ID将FirstActivity中的名称保存到共享首选项中。然后在SecondActivity中检索这些值。同样不要忘记在销毁FirstActivity时清除共享首选项。

<强> FirstActivity

public class FirstActivity extends Activity {
    private EditText etName;
    private Button btnOk;
    private String name;
    private int id = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        etName = (EditText) findViewById(R.id.etName);
        btnOk = (Button) findViewById(R.id.btnOK);

        btnOk.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                id++;
                SharedPreferences.Editor editor = getSharedPreferences("shared_pref", MODE_PRIVATE).edit();
                editor.putString(Integer.toString(id), etName.getText().toString());
                editor.commit();

                Intent intent = new Intent(getApplicationContext(),
                        SecondActivity.class);
                startActivity(intent);
            }
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        getSharedPreferences("shared_pref", MODE_PRIVATE).edit().clear().commit();
    }
}

<强> SecondActivity

public class SecondActivity extends Activity {
    private ArrayList<String> list = new ArrayList<String>();
    private ArrayAdapter<String> adapter;
    private String UName;
    private String iName;
    private ListView lvName;
    private Button btnBack;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        lvName = (ListView) findViewById(R.id.lvNames);
        btnBack = (Button) findViewById(R.id.btnBack);

        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, list);
        lvName.setAdapter(adapter);

        SharedPreferences sharedPreferences = getSharedPreferences("shared_pref", MODE_PRIVATE);
        Map<String,String> names = (Map<String, String>) sharedPreferences.getAll();

        if(names != null){
            for(String value: names.values()){
                list.add(value);
            }
            adapter.notifyDataSetChanged();
        }

        btnBack.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                finish();
            }
        });
    }
}