Intereting Posts
Сделать прокручиваемый список в круговой форме с помощью libgdx Изменить префикс. Пункт Описание Цвет текста в Android 4 Полностью защищен ли обмен файлами Bluetooth? Объединение файлов манифеста Android, конфликтный фильтр Отключить / Включить мобильные данные на Android L с корневым доступом Любой прослушиватель возможен, если условие Как получить текущее время в миллисекундах в android Facebook SDK v4 LoginButton игнорирует настройки XML Проблема с Google Диском Android API Где установить Android SDK на Mac OS X? Apache httppost, как установить контент: у которых есть пара значений имени, указывающая на другой набор пары значений имени Как получить конкретные данные по стране в API Google Places для AutocompletePredictions в Android? NullPointerException в ActionBarImplICS (с помощью приложения compat) при длительном нажатии Декодирование потоковой передачи H264 с использованием андроида низкого уровня api Отмена AsyncTask при нажатии кнопки пользователя

Как обновить адаптер Android-списка, чтобы он показывал новые элементы

Я работал над проектом. Он просто показывает список задач и добавляет к нему новые задачи. У меня 3 КЛАССА. Один для добавления: «Один для просмотра» и «Один» для хранения всей информации (или, как я думаю).

У меня уже есть 2 задания в моем списке, и они отображаются правильно.

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

  • Просто добавление элемента в список

  • Создание нового списка, состоящего из элементов старого и перестраивающего адаптера;

  • Используя notifyDataSetChanged(); Наряду с командой add ();

  • и т.п.

Вот мой код, это немного грязно, но я надеюсь, что вы это выясните.

Класс AndroidListAdapterActivity:

 public class AndroidListAdapterActivity extends ListActivity { /** Called when the activity is first created. */ Button b1; Lista o; ArrayAdapter aa; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b1=(Button)findViewById(R.id.add); Log.w("POC", "PA OVO SE ZOVE SVAKI PUT"); o=new Lista(); o.lis.add("S1"); o.lis.add("S2"); aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, o.lis); setListAdapter(aa); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(AndroidListAdapterActivity.this, Dodavanje.class); startActivity(i); } }); } @Override public void onResume(){ super.onResume(); aa.notifyDataSetChanged(); if(o.broj>=2){ aa=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, o.lis2); setListAdapter(aa); Log.w("myApp", "CALLED TOO"); } String yt=String.valueOf(o.ses); Log.w("teras", yt); aa.notifyDataSetChanged(); Log.w("myApp", "CaLLED!!!!!!!!!!!!!"); String fx= String.valueOf(o.broj); Log.w("myAPPe", fx); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); } } 

Додаванье (добавление):

 public class Dodavanje extends Activity { Button but; Button but2; EditText et; Lista o; AndroidListAdapterActivity www; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.dodavanje); but= (Button)findViewById(R.id.bb); but2= (Button)findViewById(R.id.bc); et=(EditText)findViewById(R.id.tt); www=new AndroidListAdapterActivity(); o = new Lista(); but.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("unchecked") @Override public void onClick(View arg0) { String t1= et.getText().toString(); //o.lis.add(t1); o.lis2.addAll(o.lis); o.lis2.add(t1); o.lis.add(t1); o.ses=true; Log.w("IZVJESTAJ: ", String.valueOf(o.ses)); o.broj++; String fx=String.valueOf(o.broj); Log.w("Izbacaj",fx); et.setText(""); } }); but2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); } } и public class Dodavanje extends Activity { Button but; Button but2; EditText et; Lista o; AndroidListAdapterActivity www; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.dodavanje); but= (Button)findViewById(R.id.bb); but2= (Button)findViewById(R.id.bc); et=(EditText)findViewById(R.id.tt); www=new AndroidListAdapterActivity(); o = new Lista(); but.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("unchecked") @Override public void onClick(View arg0) { String t1= et.getText().toString(); //o.lis.add(t1); o.lis2.addAll(o.lis); o.lis2.add(t1); o.lis.add(t1); o.ses=true; Log.w("IZVJESTAJ: ", String.valueOf(o.ses)); o.broj++; String fx=String.valueOf(o.broj); Log.w("Izbacaj",fx); et.setText(""); } }); but2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); } } 

Список (список):

 public class Lista extends Application { ArrayList<String> lis=new ArrayList<String>(); ArrayList<String> lis2=new ArrayList<String>(); int broj =1; boolean ses= false; } 

Solutions Collecting From Web of "Как обновить адаптер Android-списка, чтобы он показывал новые элементы"

Вы должны использовать каждый раз при изменении данных.

 aa.notifyDataSetChanged(); 

Вы можете использовать метод notifyDataSetChanged () для обновления списка. В вашем случае вы можете использовать.

 aa.notifyDataSetChanged(); 

Пожалуйста, попробуйте этот путь ….

 public class MainActivity extends Activity { ListView lView; Button btnAdd; private ListView mainListView ; private ArrayAdapter<String> listAdapter ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainListView = (ListView) findViewById( R.id.listView1 ); btnAdd = (Button)findViewById(R.id.button1); // Create and populate a List of alphabet names. String[] alphabets = new String[] { "A", "B", "C", "D", "E", "F", "G", "H"}; ArrayList<String> alphabetsList= new ArrayList<String>(); alphabetsList.addAll( Arrays.asList(alphabets) ); // Create ArrayAdapter using the for the list. listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, alphabetsList); // Set the ArrayAdapter as the ListView's adapter. mainListView.setAdapter( listAdapter ); btnAdd.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub // Here I am adding more alphabets in the list on the listener of add button. listAdapter.add( "I" ); listAdapter.add( "J" ); listAdapter.add( "K" ); listAdapter.add( "L" ); listAdapter.add( "M" ); } }); } } 

extends BaseAdapter класс extends BaseAdapter , переопределяет notifyDataSetChanged(); метод.
Ниже приведен снип-код:

  @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); list.addAll();//--insert object to list } 

Call notifyDataSetChanged(); В методе Activity onResume() , например:

 @Override protected void onResume() { super.onResume(); ((BaseAdapter)getListAdapter()).notifyDataSetChanged(); } 

Предлагаемые до сих пор решения работают, но зависят от версии вашего устройства Android. Например, чтобы использовать метод AddAll, вы должны поместить в Android-устройство android: minSdkVersion = "10".

Чтобы решить эти вопросы для всех устройств, я создал свой собственный метод в своем адаптере, и использование внутри метода add и remove наследует от ArrayAdapter, что без проблем обновляет ваши данные.

Мой код: используя собственный класс данных RaceResult, вы используете свою собственную модель данных.

ResultGpRowAdapter.java

 public class ResultGpRowAdapter extends ArrayAdapter<RaceResult> { Context context; int resource; List<RaceResult> data=null; public ResultGpRowAdapter(Context context, int resource, List<RaceResult> objects) { super(context, resource, objects); this.context = context; this.resource = resource; this.data = objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { ........ } //my own method to populate data public void myAddAll(List<RaceResult> items) { for (RaceResult item:items){ super.add(item); } } 

ResultsGp.java

 public class ResultsGp extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ........... ........... ListView list = (ListView)findViewById(R.id.resultsGpList); ResultGpRowAdapter adapter = new ResultGpRowAdapter(this, R.layout.activity_result_gp_row, new ArrayList<RaceResult>()); //Empty data list.setAdapter(adapter); .... .... .... //LOAD a ArrayList<RaceResult> with data ArrayList<RaceResult> data = new ArrayList<RaceResult>(); data.add(new RaceResult(....)); data.add(new RaceResult(....)); ....... adapter.myAddAll(data); //Your list will be udpdated!!!