我创建了一个自定义数组适配器来填充列表视图,并且当活动加载列表视图文本消失时。
PlacesListAdapter.java
public class PlacesListAdapter extends ArrayAdapter<Place> implements
Filterable {
public Context context;
private List<Place> places, orig, itemDetailsrrayList;
private PlaceFilter filter;
public PlacesListAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
public PlacesListAdapter(Context context, int resource, List<Place> places) {
super(context, resource, places);
this.context = context;
this.places = places;
itemDetailsrrayList = places;
orig = new ArrayList<Place>(itemDetailsrrayList);
filter = new PlaceFilter();
// imageLoader = new ImageLoader(context.getApplicationContext());
}
public int getCount() {
return itemDetailsrrayList.size();
}
public Place getItem(int position) {
return itemDetailsrrayList.get(position);
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_item_place, null);
}
Place place = places.get(position);
if (place != null) {
TextView place_name = (TextView) view
.findViewById(R.id.place_title);
TextView place_distance = (TextView) view
.findViewById(R.id.place_distance);
ImageView place_category_icon = (ImageView) view
.findViewById(R.id.place_category_icon);
if (place_name != null) {
place_name.setText(place.getPlaceTitle());
}
if (place_distance != null) {
place_distance.setText("198");
}
if (place_category_icon != null) {
place_category_icon.setImageResource(R.drawable.icon_category);
}
}
// Setting Alternative Row Colors
if (position % 2 == 0) {
view.setBackgroundResource(R.drawable.list_view_place_row_1);
} else {
view.setBackgroundResource(R.drawable.list_view_place_row_2);
}
return view;
}
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
return filter;
}
private class PlaceFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults oReturn = new FilterResults();
ArrayList<Place> results = new ArrayList<Place>();
if (orig == null)
orig = itemDetailsrrayList;
if (constraint != null) {
if (orig != null && orig.size() > 0) {
for (Place g : orig) {
if (g.getPlaceTitle()
.toLowerCase()
.startsWith(constraint.toString().toLowerCase()))
results.add(g);
}
}
oReturn.values = results;
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
itemDetailsrrayList = (ArrayList<Place>) results.values;
notifyDataSetChanged();
}
}
}
Place.java
public class Place {
Integer placeId;
String placeName = "", placeDistance = "", placeCategoryIcon = "";
public Place(int placeId, String placeName, String placeDistance,
String placeCategoryIcon) {
this.placeId = placeId;
this.placeName = placeName;
this.placeDistance = placeDistance;
this.placeCategoryIcon = placeCategoryIcon;
}
public Integer getPlaceId() {
return placeId;
}
public void setPlaceId(int placeId) {
this.placeId = placeId;
}
public String getPlaceName() {
return placeName;
}
public void setPlaceName(String placeName) {
this.placeName = placeName;
}
public String getPlaceDistance() {
return placeDistance;
}
public void setPlaceDistance(String placeDistance) {
this.placeDistance = placeDistance;
}
public String getPlaceCategoryIcon() {
return placeCategoryIcon;
}
public void setPlaceCategoryIcon(String placeCategoryIcon) {
this.placeCategoryIcon = placeCategoryIcon;
}
}
主要活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_main);
context = this;
Log.i("Nomad", "onCreate");
List<Place> thePlaces = new ArrayList<Place>();
for (int i = 0; i < places.length; i++) {
Place pl = new Place(i, places[i], "NO_DISTANCE", "NO_CATEGORYICON");
thePlaces.add(pl);
}
listView = (ListView) findViewById(R.id.place_list);
listView.setEmptyView(findViewById(R.id.empty));
adapter = new PlacesListAdapter(MainActivity.this, thePlaces);
listView.setAdapter(adapter);
listView.setTextFilterEnabled(true);
mSearchView = (SearchView) findViewById(R.id.action_search);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View view, int position,
long id) {
startActivity(new Intent(MainActivity.this, PlaceActivity.class));
}
});
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/primary_white" >
<ListView
android:id="@+id/place_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
android:fadingEdge="none" >
</ListView>
<TextView
android:id="@+id/empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="20dp"
android:text="@string/list_view_place_empty"
android:textColor="@color/black"
android:textSize="18sp" />
</LinearLayout>
list_item_place.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="10dp"
android:paddingTop="10dp" >
<ImageView
android:id="@+id/place_category_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:contentDescription="ss"
android:paddingLeft="10dp"
android:paddingRight="15dp"
android:src="@drawable/icon_category" />
<TextView
android:id="@+id/place_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:paddingRight="15dp"
android:textColor="@color/black"
android:text="320" />
<TextView
android:id="@+id/place_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/place_category_icon"
android:ellipsize="end"
android:paddingRight="50dp"
android:singleLine="true"
android:text="Place Name"
android:textColor="#191919"
android:textSize="18sp" />
</RelativeLayout>
这是它在加载时的显示方式
在尝试滚动内容重新出现。