从另一个活动添加项目到listview(它只添加一个项目)

时间:2016-10-15 10:55:25

标签: java android listview

我的代码中存在问题。我想从另一个活动 onclickButton 向listview添加项目,但它只添加一个项目。如果我重新计算它,它只会替换最后添加的项目。我无法弄清楚这个问题有什么帮助。

我的代码: 的 MainActivity:

package com.example.nasreddine.mtodubled; // project package

import android.app.AlertDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity; //imports statements
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem; 
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import android.content.DialogInterface;

public class MainActivity extends AppCompatActivity {
AlertDialog.Builder alert;
public ArrayList<City> listItems;
ArrayAdapter adapter;
ListView cityListView;

@Override
protected void onCreate(Bundle savedInstanceState) { //onCreate State
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listItems=new ArrayList<>();
    adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,listItems);

        //Displaying Data on ListView
    cityListView=(ListView)findViewById(R.id.cityListView);
    cityListView.setAdapter(adapter);
    registerForContextMenu(cityListView);
    listItems.add(new City("a","b","","","","",""));
    listItems.add(new City("v","c","","","","",""));
    updateListView();
    cityListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        }
    });
    cityListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
            AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
            alert.setTitle("Delete Item from list");
            alert.setMessage("Are you sure you want to delete?");
            alert.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    listItems.remove(position);
                    adapter.notifyDataSetChanged();
                }
            });
            alert.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            alert.show();
            return true;
        }
    });
}
public void updateListView() {
    Bundle bundle = getIntent().getExtras();
    Intent intent=getIntent();
    if (bundle != null) {
        City a=new City(intent.getStringExtra("city"),intent.getStringExtra("country"),"/","/","/","/","/");
        //listItems.add(a);
        adapter.add(a);
        adapter.notifyDataSetChanged();
    }
}
public boolean onOptionsItemSelected(MenuItem item){
    if (item.getItemId()==R.id.action_add){

        Intent intent=new Intent(MainActivity.this,AddCity.class);
        startActivity(intent);
        return (true);
    }
    return (super.onOptionsItemSelected(item));
}
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main,menu);
    return super.onCreateOptionsMenu(menu);
}
}

AddCity.java

package com.example.nasreddine.mtodubled;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class AddCity extends AppCompatActivity {

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

    Button addButton=(Button)findViewById(R.id.addButton);
    final TextView cityAddText=(TextView)findViewById(R.id.cityAddText);
    final TextView countryAddText=(TextView)findViewById(R.id.countryAddText);

    addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String city= cityAddText.getText().toString();
            String country=countryAddText.getText().toString();
            Intent intent =new Intent(AddCity.this,MainActivity.class);
            intent.putExtra("city",city);
            intent.putExtra("country",country);
            startActivity(intent);
        }
    });
}
}

3 个答案:

答案 0 :(得分:0)

您正在从AddCity活动重新启动MainActivity。

您需要使用方法startActivityForResult()启动AddCity Activity,而不是这样做。

在AddCity Activity中,您需要使用setResult()方法将数据发送到之前的活动,而不是启动新的MainActivity。

此外,您需要覆盖MainActivity Class中的onActivityResult方法以拥有AddCity Activity的响应。

干杯!!!

答案 1 :(得分:0)

在MainActivity.class中,使用startActivityForResult()启动AddCity.class。

public boolean onOptionsItemSelected(MenuItem item){
if (item.getItemId()==R.id.action_add){

    Intent intent=new Intent(MainActivity.this,AddCity.class);
    startActivityForResult(intent, requestCode); //ex: requestCode = 1
    return (true);

}
return (super.onOptionsItemSelected(item));
}

之后在AddCity中更改添加按钮,单击下面的侦听器代码:

addButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        String city= cityAddText.getText().toString();
        String country=countryAddText.getText().toString();
        Intent intent =new Intent();
        intent.putExtra("city",city);
        intent.putExtra("country",country);
        setResult(RESULT_OK, intent);
        finish();
    }
});

之后在MainActivity的onActivityResult()中获取数据并将其添加到列表中。还要从MainActivity中删除updatListView()方法。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    getActivity().invalidateOptionsMenu();
    if (resultCode == Activity.RESULT_OK) {

        if (data != null) {
            City a=new City(data.getStringExtra("city"),data.getStringExtra("country"),"/","/","/","/","/");
            listItems.add(a);
            adapter.add(a);
            adapter.notifyDataSetChanged();
            }

        }

    }

}

答案 2 :(得分:0)

以下是代码:

班级主要活动,

import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity
{
    AlertDialog.Builder alert;
    public List<City> listItems;
    ArrayAdapter<City> adapter;
    ListView cityListView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    { //onCreate State
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listItems = new ArrayList<>();
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItems);

        //Displaying Data on ListView
        Button addButton = (Button) findViewById(R.id.addButton);
        addButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                startActivityForResult(new Intent(MainActivity.this, AddCity.class), 1);
            }
        });

        cityListView = (ListView) findViewById(R.id.cityListView);
        cityListView.setAdapter(adapter);
        registerForContextMenu(cityListView);
        listItems.add(new City("a", "b"));
        listItems.add(new City("v", "c"));
        updateListView();
    }

    public void updateListView()
    {
        Bundle bundle = getIntent().getExtras();
        Intent intent = getIntent();
        if(bundle != null)
        {
            City a = new City(intent.getStringExtra("city"), intent.getStringExtra("country"));
            //listItems.add(a);
            adapter.add(a);
            adapter.notifyDataSetChanged();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        super.onActivityResult(requestCode, resultCode, intent);

        if(requestCode == 1 && resultCode == RESULT_OK)
        {
            City a = new City(intent.getStringExtra("city"), intent.getStringExtra("country"));
            //listItems.add(a);
            adapter.add(a);
            adapter.notifyDataSetChanged();
        }
    }
}

班级添加城市,

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class AddCity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_city);

        Button addButton = (Button) findViewById(R.id.addButton);
        final TextView cityAddText = (TextView) findViewById(R.id.cityAddText);
        final TextView countryAddText = (TextView) findViewById(R.id.countryAddText);

        addButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                String city = cityAddText.getText().toString();
                String country = countryAddText.getText().toString();

                Intent intent = new Intent();
                intent.putExtra("city", city);
                intent.putExtra("country", country);

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

希望这对你有帮助。

干杯!!!