2017-01-25 58 views
0

我需要動態添加項目到列表視圖。添加動態項目到列表視圖

現在我正在使用FAB(crearEntrenamintoActivity)打開一個新的活動(crearEjercicioActivity),並在這裏完成要添加到列表視圖中的新項目的必需數據。

但是通過這種方式,我需要在兩個活動之間通過parceableExtra所有時間。

有沒有其他更簡單的方法來做到這一點?

編輯:

這裏當我按下按鈕FAB我發送到新的活動額外的「entrenamiento」因爲我需要在列表視圖的所有項目保存到該對象。

public void initFAB() { 
     FloatingActionButton floatingActionButton = (FloatingActionButton) findViewById(R.id.fabCrearEntrenamiento); 
     if (floatingActionButton != null) { 
      floatingActionButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //lanzamos la actividad de crear ejercicio 
        entrenamiento.setUbicacion(etUbicacion.getText().toString()); 
        entrenamiento.setHoraInicio(etHoraInicio.getText().toString()); 
        Intent intent = new Intent(getApplicationContext(), CrearEjercicioActivity.class); 
        intent.putExtra("entrenamiento", entrenamiento); 
        startActivity(intent); 
       } 
      }); 
     } 
    } 

然後在「crearEjercicioActivity」我有這個。這裏當我按下保存按鈕時,我在arrayList中添加新項目。

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_save: 
       Entrenamiento entrenamiento = getIntent().getParcelableExtra("entrenamiento"); 
       Ejercicio ejercicio = new Ejercicio(); 
       EditText titulo = (EditText) findViewById(R.id.etTituloEjercicio); 
       ejercicio.setTitulo(titulo.getText().toString()); 
       entrenamiento.getEjercicios().add(ejercicio); 
       Intent intentEjercicio = new Intent(getApplicationContext(), CrearEntrenamientoActivity.class); 
       intentEjercicio.putExtra("entrenamiento", entrenamiento); 
       startActivity(intentEjercicio); 
       return true; 
      case R.id.action_home: 
       Intent intent = new Intent(getApplicationContext(), DashBoardActivity.class); 
       startActivity(intent); 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

,最後我做到這一點:

if (entrenamiento.getEjercicios().size() > 0) { 
      ListView listViewEjercicios = (ListView) findViewById(R.id.listViewEjercicios); 
      ArrayList<String> titulosEjercicios = new ArrayList<>(); 

      for (Ejercicio ejercicio : entrenamiento.getEjercicios()) { 
       titulosEjercicios.add(ejercicio.getTitulo()); 
      } 

      ArrayAdapter<String> listAdapter = new ArrayAdapter<>(this, R.layout.simple_row_ejercicio_layout, titulosEjercicios); 
      if (listViewEjercicios != null) { 
       listViewEjercicios.setAdapter(listAdapter); 
      } 
     } 
+1

你能解釋一點點或將代碼? – adalPaRi

+0

一些代碼請 – tpk

+0

是的,對不起。我編輯。 – garciam202

回答

2

我推薦一個經理級的單身人士。經理應該包括像列表或地圖這樣的數據結構。在那裏你可以保存你的對象。如果你想添加一個新的對象調用manager.add(yourobject)。另外,你可以像通知回調一樣。每個使用經理數據的視圖都必須實現您的回調。用manager.registerCallback()註冊經理的意見。每當你修改經理的數據,如add()remove(),你必須致電notifyCallbacks()

如果您實施我的解決方案,那麼您不必創建多個適配器對象。您正在使用保存在您的經理中的一個列表/地圖對象。修改數據後,您只需撥打adapter.notifyDataSetChanged()

檢查對這個職位我的代碼示例: Unable to refresh listview data within same fragments used under different tabs

+0

我不太明白。你能解釋我更多嗎?我有兩個活動,第一個包含listview並開始第二個活動,在第二個活動中,我保存將包含在第一個活動的列表視圖中的新項目。 – garciam202

+0

當前您將帶有parceableExtra的listview數據傳遞給第二個活動。現在在你的第二個活動中,你有這個通過的項目的副本。您將一個新項目設置爲副本。最後你設置一個新的適配器。使用我的解決方案,您不會使用副本。你有一個經理來存儲對象。沒有副本了。您不必多次調用'setAdapter()'。你會一直使用相同的列表。最後你只需要調用'adapter.notifyDataSetChanged()'而不是創建一個新的適配器。 – beeb

+0

是的。但我不明白適配器和經理之間的關係。在第二個活動中,我調用addMovie(movie),它調用notifyCallbacks();其中循環m_MovieChangedCallbacks在CDMBasicMovieFragment中調用onMoviesChanged(),但是這是什麼? CDMBasicMovieFragment應該是我的第一個活動? m_Movies和m_MovieChangedCallbacks有什麼區別? 對不起,我的疑惑 – garciam202

0

你可以只使用一個活動,然後爲每個你的兩個視圖片段。然後Activity可以保存對元素的引用,並通過調用它們的公共方法(like described here at the bottom)來處理兩個片段之間的通信。

如果你想堅持活動的意圖可能是推薦的方法。

+0

但我需要listfragment開始新的活動,然後用New項更新listfragment。我怎樣才能溝通? – garciam202

相關問題