Динамическое добавление элементов в просмотр списка в Android - PullRequest
0 голосов
/ 15 февраля 2012

Я делаю приложение для Android, которому нужно добавлять элементы в динамический ListView. Как я могу это сделать? Я хочу добавить элемент после нажатия "AddItemToListViewButton". Я пытаюсь использовать код ниже, но, тем не менее, он не работает. Как я могу это исправить? Мой код:

public class NotesActivity extends ListActivity implements OnClickListener {

    List<String> myList = new ArrayList<String>();
    EditText AddItemToListViewEditText;
    Button AddItemToListView, AddItemToListViewButton;
    LinearLayout AddItemToListViewLinearLayout;
    static final String[] COUNTRIES = new String[] {
      "Matte på A1 med Ole", "Engelsk på klasserommet", "Film på A1 etter friminuttet"
      };

   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.notes);
    setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        // When clicked, show a toast with the TextView text
        Toast.makeText(getApplicationContext(), "Note: " + ((TextView) view).getText(),
            Toast.LENGTH_SHORT).show();
  }
    });
  }
    @Override
   public boolean onCreateOptionsMenu(Menu meny) {
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.listviewmenubuttons, meny);
      return true;
   }
    @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      switch(item.getItemId()) {
      case R.id.AddItemToListView:
        AddItemToListViewEditText = (EditText)findViewById(R.id.AddItemToListViewEditText);
        AddItemToListViewButton = (Button)findViewById(R.id.AddItemToListViewButton);
        AddItemToListViewLinearLayout = (LinearLayout)findViewById(R.id.AddItemToListViewLinearLayout);
        AddItemToListViewButton.setOnClickListener(this);
        AddItemToListViewLinearLayout.setVisibility(View.VISIBLE);
        break;
        }
    return true;
}
   public void onClick(View src) {
      switch(src.getId()) {
      case R.id.AddItemToListViewButton:
        myList.add("Hello");
        myList.add("world");
        System.out.println("The list contains " +
           myList.size() + "elements, and " +
           "the first is " + myList.get(0));
        AddItemToListViewLinearLayout.setVisibility(View.GONE);
        break;
    }
}
}

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

Ваш ListActivity имеет элемент ListView, основанный на ArrayAdapter<String>, содержащем строковый массив с именем СТРАНЫ .В вашем методе onClick() вы добавляете строки в ArrayList<String> (myList), но ваш адаптер ListView не знает об этом, и вы пытаетесь добавить его в свой список (ну, я думаю, это то, что вы пытаетесьделать).Итак:

- в вашем myList добавьте текущее содержимое вашего COUNTRIES строкового массива:

myList.add("Matte på A1 med Ole");//and the other strings from COUNTRIES

- установите адаптер, чтобы он указывал на myList:

setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, myList));

- в вашем onClick() методе пишите:

public void onClick(View src) {
    switch(src.getId()) {
    case R.id.AddItemToListViewButton:
        myList.add("Hello");
        myList.add("world");
        ((ArrayAdapter)getListView().getAdapter()).notifyDataSetChanged(); 
        AddItemToListViewLinearLayout.setVisibility(View.GONE);
        break;
    }
}
0 голосов
/ 13 марта 2014

Вы хотите, чтобы это было нужно в событии клика ...

((ArrayAdapter)getListView().getAdapter()).notifyDataSetChanged();

0 голосов
/ 15 февраля 2012

Попробуйте перезагрузить список или, может быть, просто

ListAdapter notifyDataSetChanged();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...