2016-10-15 1 views
0

У меня проблема в моем коде. Я хочу добавить элементы в список из другой точки зрения onclickButton, но он добавляет только один элемент. И если я reapeat его, он заменяет только последний добавленный элемент. Я не могу понять, в чем проблема, пожалуйста, помогите.Добавить элемент в список из другого действия (он добавляет только один элемент)

мой код: 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); 
     } 
    }); 
} 
} 
+0

Можете ли вы сузить часть своего кода, что является проблемой вместо публикации большого блоба? –

ответ

0

В своем MainActivity.class запустите AddCity.class, используя startActivityForResult().

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

После этого в onActivityResult MainActivity (в) получить информацию и добавьте его в список. Также удалите метод updatListView() из MainActivity.

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

     } 

    } 

} 
0

Вы перезапуском MainActivity от AddCity деятельности.

Вместо этого вам необходимо запустить операцию AddCity, используя метод startActivityForResult().

И в дополнение к активности AddCity, а не при запуске новой MainActivity, вам нужно использовать метод setResult() для отправки данных в предыдущую активность.

Также вам необходимо переопределить метод onActivityResult в классе MainActivity для получения ответа от действия AddCity.

Cheers !!!

+0

Можете ли вы привести пример, потому что я новичок в android –

+0

вижу мой другой ответ, который имеет полный код. –

0

Вот код:

Class Основная деятельность,

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

Class Добавить город,

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

Будем надеяться, что это поможет вам.

Cheers !!!