2015-02-09 2 views
2

Я пытаюсь дополнить код, который управляет настраиваемым ListView через три класса: AdapterListView, ItemListView и MainActivity.Адаптер в ListView в Android Studio

До сих пор код только вводил данные и изображения (вставленные кодом) через AdapterListView. Внутри этого класса вы хотите знать, как использовать другие функции, такие как добавление или удаление элементов приложения.

Ниже классов три проекта:

AdapterListView

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
import java.util.ArrayList; 

/** 
* Created by LuizHMU on 2/7/15. 
*/ 
public class AdapterListView extends BaseAdapter { 

private LayoutInflater mInflater; 
private ArrayList<ItemListView> itens; 

public AdapterListView(Context context, ArrayList<ItemListView> itens) { 
    //Itens que preencheram o listview 
    this.itens = itens; 
    //responsavel por pegar o Layout do item. 
    mInflater = LayoutInflater.from(context); 
} 

/** 
* Retorna a quantidade de itens 
* 
* @return 
*/ 
public int getCount() { 
    return itens.size(); 
} 

/** 
* Retorna o item de acordo com a posicao dele na tela. 
* 
* @param position 
* @return 
*/ 
public ItemListView getItem(int position) { 
    return itens.get(position); 
} 

/** 
* Sem implementação 
* 
* @param position 
* @return 
*/ 
public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View view, ViewGroup parent) { 
    //Pega o item de acordo com a posção. 
    ItemListView item = itens.get(position); 
    //infla o layout para podermos preencher os dados 
    view = mInflater.inflate(R.layout.item_list, null); 

    //atravez do layout pego pelo LayoutInflater, pegamos cada id relacionado 
    //ao item e definimos as informações. 
    ((TextView) view.findViewById(R.id.text)).setText(item.getTexto()); 
    ((ImageView) view.findViewById(R.id.imagemview)).setImageResource(item.getIconeRid()); 

    return view; 
} 
} 

ItemListView

/** 
* Created by LuizHMU on 2/7/15. 
*/ 
public class ItemListView { 

private String texto; 
private int iconeRid; 

public ItemListView() { 
} 

public ItemListView(String texto, int iconeRid) { 
    this.texto = texto; 
    this.iconeRid = iconeRid; 
} 

public int getIconeRid() { 
    return iconeRid; 
} 

public void setIconeRid(int iconeRid) { 
    this.iconeRid = iconeRid; 
} 

public String getTexto() { 
    return texto; 
} 

public void setTexto(String texto) { 
    this.texto = texto; 
} 
} 

MainActivity

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class MainActivity extends Activity implements OnItemClickListener { 

private ListView listView; 
private AdapterListView adapterListView; 
private ArrayList<ItemListView> itens; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //carrega o layout onde contem o ListView 
    setContentView(R.layout.activity_main); 

    //Pega a referencia do ListView 
    listView = (ListView) findViewById(R.id.list); 
    //Define o Listener quando alguem clicar no item. 
    listView.setOnItemClickListener(this); 

    createListView(); 
} 

private void createListView() { 
    //Criamos nossa lista que preenchera o ListView 
    itens = new ArrayList<ItemListView>(); 
    ItemListView item1 = new ItemListView("Felpudo", R.drawable.felpudo); 
    ItemListView item2 = new ItemListView("Felpudão", R.drawable.felpudo1); 
    ItemListView item3 = new ItemListView("Felpudinho", R.drawable.felpudo2); 

    itens.add(item1); 
    itens.add(item2); 
    itens.add(item3); 

    //Cria o adapter 
    adapterListView = new AdapterListView(this, itens); 

    //Define o Adapter 
    listView.setAdapter(adapterListView); 
    //Cor quando a lista é selecionada para ralagem. 
    listView.setCacheColorHint(Color.TRANSPARENT); 
} 

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    //Pega o item que foi selecionado. 
    ItemListView item = adapterListView.getItem(arg2); 
    //Demostração 
    Toast.makeText(this, "Você Clicou em: " + item.getTexto(), Toast.LENGTH_LONG).show(); 
} 
} 
+0

Что именно вопрос? – Willis

+0

Как добавить или удалить данные в списке приложением, используя класс AdapterListView. @Willis –

ответ

1

Добавьте это в адаптер:

public void addItem(ItemListView item){ 
items.add(item); 
notifyDatasetChanged(); 
} 

public void removeItem(int positionToRemove){ 
items.remove(positionToRemove); 
notifyDatasetChanged(); 
} 

Для дальнейшего объяснения Что происходит, адаптер представляет собой контроллер, средний шаг между информацией и способ его отображения в представлении (ListView). Информация в этом случае предоставляется адаптеру через список элементов, поэтому в основном манипулирование списком и вызов notifyDataSetChanged() изменят представления, отображаемые пользователю.

Надеюсь, что я помог.

+0

Как я могу назвать эти методы в моей MainActivity? @jvrodrigues –

+0

Ну, достаточно легко, adapterListView.addItem (yourItem); и adapterListView.removeItem (позиция); – jvrodrigues

+0

Спасибо за помощь. Как это будет, когда я запустил приложение? Я смогу добавить или удалить элементы из списка для него? Для вашего объяснения я добавляю и удаляю элементы только по коду. @jvrodrigues –

0

Вы можете использовать простые методы, как это в вашей деятельности:

private void addItemToList(ItemListView item){ 
    if(item != null){ 
     itens.add(item) 
    } 
} 

(удалить клетки используют list.remove())

Добавьте это в адаптере:

public void loadNewList(List<ItemListView> list){ 
    if(itens != null){ 
     itens.clear; 
    } 
    itens = list; 
    notifyDataSetChanged(); 
} 

nb: вы должны использовать шаблон держателя для ячеек списка:

0

В вашей деятельности у вас есть listView атрибут. В onCreate() методе вы можете сделать это:

listView.setOnItemLongClickListener(new OnItemLongClickListener() { 
      public boolean onItemLongClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       final ItemListView item = (ItemListView) parent.getItemAtPosition(position); 
       // Do whatever you want here !! 
       adapterListView.notifyDataSetChanged(); 
       return true; 
      } 
     }); 
Смежные вопросы