Zajmuję się tworzeniem aplikacji Android, w którym zrobiłem jeden ListView. Muszę dodać 2 przyciski z każdym wierszem w ListView. Te 2 przyciski to Dodaj i usuń. Gdy użytkownik wybierze jeden z przycisków, należy wykonać pewne czynności. Jak mogę to zrobić?ListView z ADD i usuwanie przycisków w każdym rzędzie w android
Odpowiedz
public class UserCustomAdapter extends ArrayAdapter<User> {
Context context;
int layoutResourceId;
ArrayList<User> data = new ArrayList<User>();
public UserCustomAdapter(Context context, int layoutResourceId,
ArrayList<User> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
UserHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new UserHolder();
holder.textName = (TextView) row.findViewById(R.id.textView1);
holder.textAddress = (TextView) row.findViewById(R.id.textView2);
holder.textLocation = (TextView) row.findViewById(R.id.textView3);
holder.btnEdit = (Button) row.findViewById(R.id.button1);
holder.btnDelete = (Button) row.findViewById(R.id.button2);
row.setTag(holder);
} else {
holder = (UserHolder) row.getTag();
}
User user = data.get(position);
holder.textName.setText(user.getName());
holder.textAddress.setText(user.getAddress());
holder.textLocation.setText(user.getLocation());
holder.btnEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("Edit Button Clicked", "**********");
Toast.makeText(context, "Edit button Clicked",
Toast.LENGTH_LONG).show();
}
});
holder.btnDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("Delete Button Clicked", "**********");
Toast.makeText(context, "Delete button Clicked",
Toast.LENGTH_LONG).show();
}
});
return row;
}
static class UserHolder {
TextView textName;
TextView textAddress;
TextView textLocation;
Button btnEdit;
Button btnDelete;
}
}
Hej Proszę mieć look here-
mam tę samą odpowiedź tutaj na moim blogu ..
Zamieszanie istnieje. Mój ListView jest gotowy. Muszę tylko dodać dwa przyciski w każdym rzędzie. Nie otrzymuję wyraźnego kodu. –
wystarczy umieścić dwa przycisk w row_layout.xml jak inne TextView i nazywają je z ich id .. i ustawić onclick listner jak Me holder.btnDelete.setOnClickListener (nowa OnClickListener() { @Override public void onClick (Zobacz v) {// TODO Automatycznie generowane metoda skrótową Log.i ("przycisk Usuń Kliknięcie", "**********"); Toast.makeText (kontekst, przycisk "Usuń Kliknięcie" , Toast.LENGTH_LONG) .pokaż(); } }); –
dobrze Proponuję po prostu skopiować cały kod i złożyć aplikację demo, a następnie łatwo zrozumieć działanie kodu. –
na przycisk Usuń kliknij zdarzenie
public void delete(View v){
ListView listview1;
ArrayList<E> datalist;
final int position = listview1.getPositionForView((View) v.getParent());
datalist.remove(position);
myAdapter.notifyDataSetChanged();
}
Najpierw trzeba utworzyć niestandardowy układ xml, który będzie reprezentował pojedynczy element na twojej liście. Do tego układu dodasz dwa przyciski wraz z innymi elementami, które chcesz wyświetlić na liście.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/list_item_string"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:paddingLeft="8dp"
android:textSize="18sp"
android:textStyle="bold" />
<Button
android:id="@+id/delete_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:text="Delete" />
<Button
android:id="@+id/add_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/delete_btn"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:text="Add" />
</RelativeLayout>
Następnie trzeba będzie utworzyć niestandardową ArrayAdapter klasy, która będzie używana do pompowania układ xml, a także obsługiwać przyciski i na imprezach klikania.
public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
private Context context;
public MyCustomAdapter(ArrayList<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int pos) {
return list.get(pos);
}
@Override
public long getItemId(int pos) {
return list.get(pos).getId();
//just return 0 if your list items do not have an Id variable.
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.my_custom_list_layout, null);
}
//Handle TextView and display string from your list
TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);
listItemText.setText(list.get(position));
//Handle buttons and add onClickListeners
Button deleteBtn = (Button)view.findViewById(R.id.delete_btn);
Button addBtn = (Button)view.findViewById(R.id.add_btn);
deleteBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//do something
list.remove(position); //or some other task
notifyDataSetChanged();
}
});
addBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//do something
notifyDataSetChanged();
}
});
return view;
}
}
Wreszcie, w swojej działalności można instancję niestandardowej klasy ArrayAdapter i ustawić go do ListView.
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_activity);
//generate list
ArrayList<String> list = new ArrayList<String>();
list.add("item1");
list.add("item2");
//instantiate custom adapter
MyCustomAdapter adapter = new MyCustomAdapter(list, this);
//handle listview and assign adapter
ListView lView = (ListView)findViewById(R.id.my_listview);
lView.setAdapter(adapter);
}
Mam nadzieję, że to pomoże!
co jeśli chcę używać CursorLoader? –
return list.get (pos) .getId(); --- Nie można rozwiązać metody 'getId()' –
@ TahaKörkem wystarczy zastąpić "return list.get (pos) .getId()" z "return 0". Metoda getId() nie jest przydatna, jeśli elementy listy nie mają właściwości Id. – adam83
Korzystanie niestandardowy układ listview, Dodaj dwa przyciski w widoku elementu i napisać skargę na analogicznego zdarzenia click – OMAK