2015-05-06 2 views
-2

сценарий:Добавление элементов в ListView из другой деятельности

Первого mainactivity катер и от пользователя опции меню запускает вторую активность с помощью намерения и там он добавляет некоторый текст EditText и получить, что значение EditText используя намерение первого действие и добавьте это значение в список.

FirstActivity:

public class MainActivity extends Activity { 

    ListView lv; 
    EditText et; 
    String AddedTask ; 
    ArrayList<Model> modelList; 
    CustomAdapter adapter; 

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

       Intent intent = getIntent(); 
       if (intent.hasExtra("NewTask")) { 
       AddedTask = this.getIntent().getExtras().getString("NewTask"); 
       lv = (ListView) findViewById(R.id.listViewData); 
       String name = AddedTask; 
       Model md = new Model(name); 
       modelList.add(md); 
       adapter = new CustomAdapter(getApplicationContext(), modelList); 
       lv.setAdapter(adapter); 
       adapter.notifyDataSetChanged(); 
      } 



    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar actions click 
     switch (item.getItemId()) { 
     case R.id.action_settings: 
      return true; 
     case R.id.action_add_task: 
      Intent i = new Intent(MainActivity.this, AddTask.class); 
      startActivity(i); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

} 

Вторая активность:

public class AddTask extends Activity { 
Button addtask; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.add_task); 

      // get action bar 
      ActionBar actionBar = getActionBar(); 

      // Enabling Up/Back navigation 
      actionBar.setDisplayHomeAsUpEnabled(true); 

      addtask = (Button) findViewById(R.id.btnaddlist); 
      findViewById(R.id.btnaddlist).setOnClickListener(
         new View.OnClickListener() { 
          public void onClick(View arg0) { 
           EditText edit = (EditText) findViewById(R.id.tskname); 
           Intent i = new Intent(AddTask.this, 
             MainActivity.class); 
           //Bundle bundle = new Bundle(); 
           String TaskName = edit.getText().toString(); 
           //bundle.putString("NewTask", TaskName); 
           i.putExtra("NewTask", TaskName); 
           i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
           //i.putExtras(bundle); 
           startActivity(i); 
          } 
         }); 

      } 

     } 

Теперь моя проблема я могу добавить данные в ListView, но каждый раз, когда я возвращаюсь к mainactivity предыдущих данных, которые была потеряна и обновлена ​​старые данные с моими новыми данными.

Я искал ответы на многие ответы, и большинство из них предлагает добавить adapter.notifyDataSetChanged();, которые я уже пробовал, и ничего не работало.

я сделал, проверив адаптер является нулевым или обновление данных таким образом, и получение исключения нулевого указателя:

if (adapter== null) 
{ 
    adapter = new CustomAdapter(getApplicationContext(), modelList); 
    lv.setAdapter(adapter); 
} 

Может кто-нибудь сказать мне, как я могу получить эту работу?

+1

@ downvoter-Уход за комментарием, а не downvoting – coder

+0

использование ArrayList модельList; как переменная окунания –

+0

Должны ли данные храниться всегда? Если это так, мы должны использовать базу данных. Кроме того, мы можем использовать SharedPreferences или Extra in Intent – Nabin

ответ

0
new View.OnClickListener() { 
         public void onClick(View arg0) { 
          EditText edit = (EditText) findViewById(R.id.tskname); 
          Intent i = new Intent(AddTask.this, 
            MainActivity.class); 
          //Bundle bundle = new Bundle(); 
          String TaskName = edit.getText().toString(); 
          //bundle.putString("NewTask", TaskName); 
          i.putExtra("NewTask", TaskName); 
          i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
          //i.putExtras(bundle); 
          startActivity(i); 
         } 
        }); 

Вы начинаете новую деятельность каждый раз, когда хотите добавить товар.
Рассмотрите возможность использования

startActivityForResult() 

Link to Android Documentation

Даже если startActivityForResult() ИМХО самый лучший способ, чтобы исправить вашу проблему, я дам вам подсказку, почему он не показывает ваш «старый» данные. Вы не закончите свою первую работу при переходе на второй. Вы можете Aswell просто закончить свою вторую деятельность и ваш MainActivity будет работать в

onResume()

для этого проверьте Android lifecycle

0

Не используйте putextra и намерения техники. Следуйте ниже техники.

В основной деятельности создают sharedpref следующим образом:

public static final String SharedPref = "MyPreferences"; 

В деятельности 2 Вставьте этот код.

SharedPreferences settings=null;//declaration 

settings=getSharedPreferences(SharedPref,0);//initialization 

String TaskName= edit.getText().toString(); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putString("NewTask", TaskName); 
editor.commit(); 
finishfromchild(AddTask.this); 

В основной деятельности:

SharedPreferences settings=null;//declaration 

В OnCreate

//now initialise settings 
settings=getSharedPreferences(SharedPref,0);//SharedPref is the foldername  
//of your sharedpreferences(you create it first) 

//Now create onResume method 
public void onResume() 
{ 
super.onResume(); 
      AddedTask=settings.getString("NewTask", ""); 
      lv = (ListView) findViewById(R.id.listViewData); 
      String name = AddedTask; 
      Model md = new Model(name); 
      modelList.add(md); 
      adapter = new CustomAdapter(getApplicationContext(), modelList); 
      lv.setAdapter(adapter); 
} 

Надеется, что это работает. Я сделал то же самое в своем предыдущем проекте.

Смежные вопросы