【问题标题】:Add item to listview from another activity (it only adds one item)从另一个活动将项目添加到列表视图(它只添加一个项目)
【发布时间】:2016-10-15 10:55:24
【问题描述】:

我的代码有问题。我想从另一个活动 onclickButton 将项目添加到列表视图,但它只添加一个项目。如果我重复它,它只会替换最后添加的项目。我不知道是什么问题,请帮忙。

我的代码: 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);
        }
    });
}
}

【问题讨论】:

  • 您能否缩小代码中存在问题的部分而不是发布一个大块?

标签: java android listview


【解决方案1】:

在您的 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】:

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

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

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

    您还需要覆盖 MainActivity 类中的 onActivityResult 方法以拥有来自 AddCity Activity 的响应。

    干杯!!!

    【讨论】:

    • 你能举个例子吗,因为我是android新手
    【解决方案3】:

    代码如下:

    类主活动,

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

    希望这会对您有所帮助。

    干杯!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2016-09-23
      相关资源
      最近更新 更多