簡體   English   中英

將項目從另一個活動添加到列表視圖(僅添加一個項目)

[英]Add item to listview from another activity (it only adds one item)

我的代碼有問題。 我想從另一個活動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);
        }
    });
}
}

您正在從AddCity活動重新啟動MainActivity。

而不是這樣做,您需要使用方法startActivityForResult()啟動AddCity Activity。

並且在AddCity活動中,而不是啟動新的MainActivity,您需要使用setResult()方法將數據發送到先前的活動。

另外,您還需要覆蓋MainActivity類中的onActivityResult方法,以擁有AddCity Activity的響應。

干杯!!!

在您的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();
            }

        }

    }

}

這是代碼:

班級主要活動

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);
            }
        });
    }
}

希望對您有幫助。

干杯!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM