我想在android中使用listview显示找到的beacons的UUID和Minor代码。
我认为自定义适配器存在问题。
这是我的实际代码:
FoundBeacons.java
public class FoundBeacon extends Activity implements BeaconConsumer {
private BeaconManager beaconManager;
private ListView listview;
private ArrayList<Beacon> beaconList;
private AdapterBeacon bAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_found_beacon);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.bind(this);
beaconList = new ArrayList<Beacon>();
this.bAdapter = new AdapterBeacon(this, beaconList);
listview = (ListView) findViewById(R.id.listview);
listview.setAdapter(bAdapter);
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(final Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
runOnUiThread(new Runnable() {
@Override
public void run() {
bAdapter.copyBeacons(beacons);
listview.setAdapter(bAdapter);
}
});
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
} catch (RemoteException e) {
}
}
}
AdapterBeacon.java
public class AdapterBeacon extends ArrayAdapter<Beacon> {
private Context context;
private ArrayList<Beacon> allBeacons;
private LayoutInflater mInflater;
private boolean mNotifyOnChange = true;
public AdapterBeacon(Context context, ArrayList<Beacon> mBeacons) {
super(context, R.layout.row_beacon);
this.context = context;
this.allBeacons = new ArrayList<Beacon>(mBeacons);
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return allBeacons .size();
}
@Override
public Beacon getItem(int position) {
return allBeacons .get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public int getPosition(Beacon item) {
return allBeacons .indexOf(item);
}
@Override
public int getViewTypeCount() {
return 1; //Number of types + 1 !!!!!!!!
}
@Override
public int getItemViewType(int position) {
return 1;
}
public void copyBeacons(Collection<Beacon> beacons)
{
allBeacons.clear();
for (Beacon b : beacons)
{
allBeacons.add(b);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case 1:
convertView = mInflater.inflate(R.layout.row_beacon,parent, false);
holder.name = (TextView) convertView.findViewById(R.id.t1);
holder.description = (TextView) convertView.findViewById(R.id.t2);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(allBeacons.get(position).getId1().toString());
holder.description.setText(allBeacons.get(position).getId2().toString());
holder.pos = position;
return convertView;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
mNotifyOnChange = true;
}
public void setNotifyOnChange(boolean notifyOnChange) {
mNotifyOnChange = notifyOnChange;
}
//---------------static views for each row-----------//
static class ViewHolder {
TextView name;
TextView description;
int pos; //to store the position of the item within the list
}
}
activity_found_beacon.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_found_beacon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.pio.pd_inz_ibeacon.FoundBeacon">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:id="@+id/listview" />
row_beacon.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/t1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"/>
<TextView
android:id="@+id/t2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"/>
<TextView
android:id="@+id/t3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"/>