mam ListView
który używa niestandardowych zasilacz, ale nie mogę kliknąć na ListView poz ..Elementy ListView nie są klikalne. czemu?
aktywny do widoku listy ..
package com.adhamenaya.projects;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.adhamenaya.classes.Place;
public class PlacesListActivity extends Activity {
private ArrayList<Place> places;
private ArrayList<String> items;
GridviewAdapter mAdapter;
private ListView lvPlaces;
private EfficientAdapter adap;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.places_list);
lvPlaces = (ListView) this.findViewById(R.id.lvPlaces);
new DowanloadPlaces().execute("");
}
private void bindList(ArrayList<Place> places) {
this.places = places;
// Start creating the list view to show articles
items = new ArrayList<String>();
for (int i = 0; i < places.size(); i++) {
items.add(String.valueOf(places.get(i).mName));
}
adap = new EfficientAdapter(this);
adap.notifyDataSetChanged();
lvPlaces.setAdapter(adap);
}
// EfficientAdapter : to make a customized list view item
public class EfficientAdapter extends BaseAdapter implements Filterable {
// The function of inflater to convert objects from XML layout file (i.e. main.xml) to a programmable
LayoutInflater inflater;
Context context;
public EfficientAdapter(Context context) {
inflater = LayoutInflater.from(context);
this.context = context;
}
public int getCount() {
// Get the number of items in the list
return items.size();
}
public Object getItem(int position) {
// To return item from a list in the given position
return items.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(final int position, View convertView,ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.adaptor_content, null);
holder = new ViewHolder();// Create an object to hold at components in the list view item
holder.textLine = (TextView) convertView.findViewById(R.id.textLine);
holder.buttonLine = (Button) convertView.findViewById(R.id.buttonLine);
holder.buttonLine.setOnClickListener(new OnClickListener() {
private int pos = position;
public void onClick(View v) {
places.remove(pos);
bindList(places);// to bind list items
Toast.makeText(getApplicationContext(),"Deleted successfuly :)", Toast.LENGTH_LONG).show();
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// Bind the data efficiently with the holder.
holder.textLine.setText(String.valueOf(places.get(position).mName));
return convertView;
}
public Filter getFilter() {
// TODO Auto-generated method stub
return null;
}
}
// ViewHolder : class that represents a list view items
static class ViewHolder {
TextView textLine;
Button buttonLine;
}
// DownloadRSSFeedsTask: works in a separate thread
private class DowanloadPlaces extends AsyncTask<String, Void, ArrayList<Place>> {
@Override
protected ArrayList<Place> doInBackground(String... params) {
ArrayList<Place> places = new ArrayList<Place>();
Place p = new Place();
for(int i =0;i<25;i++){
p.mName = "Al Mathaf Hotel";
places.add(p);
}
return places;
}
@Override
protected void onPostExecute(ArrayList<Place> places) {
bindList(places);
}
}
}
układ places_list.xml
układ adaptor_content.xml
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textLine"
android:layout_centerVertical="true"
android:src="@drawable/settings" />
</RelativeLayout>
gdzie jest Twój OnClickListener dla ListView? –
Chciałbym również użyć ContextMenu dla elementów listy dla tego zadania (usunąć element listy), ale to zależy od Ciebie ... –
Jakie zachowanie, które widzisz, prowadzi do przekonania, że nie można go kliknąć? Czy jesteś pewien, że element ListView jest ustawiony do kliknięcia? Jeśli nie, zdarzenia onClick nie zostaną wygenerowane. Zasadniczo, jeśli napotkasz problem: 1. Najpierw zrób jak najwięcej debugowania. 2. Jeśli spodziewasz się zachowania i nie nastąpi, upewnij się, że kod osiąga punkt, w którym można oczekiwać wystąpienia tego zachowania. Jeśli nie, opublikuj kod i pytanie "dlaczego mój kod nie osiąga punktu"? 3. Jeśli masz awarię, opublikuj komunikat o awarii i ślad stosu, a następnie zapytaj "Dlaczego mój kod się przerywa?" M –