首先,我将解释我想要做什么,我将发布下面的代码。 我有一个蓝牙服务,一个带有自定义适配器的ListView和一个用于蓝牙服务的处理程序,如果手机已连接则会通知||连接||从BT设备中删除。
我的ListView包含附近的蓝牙设备,点击项目标签,例如,更新,手机将连接到该设备。
假设我有2个BT设备。如果我将选择第一个标签将更新(这是正确的),但如果我选择项目号。 2,由于某种原因它更新也是第一个标签< - 这是问题
我在我的应用程序中使用片段,ListViewAdapter的代码和方法在下面更新:
列表视图适配器代码:
public class BluetoothListViewAdapter extends ArrayAdapter<HashMap<String, String>>{
Context ctx;
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private LayoutInflater inflater = null;
CircularProgressButton Device = null;
public BluetoothListViewAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
super(a,R.layout.template_bluetooth_listview_element,d);
ctx = a.getBaseContext();
activity = a;
data = d;
inflater = (LayoutInflater) a.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String TAG;
String MAC;
View vi = convertView;
if (vi == null)
vi = inflater.inflate(R.layout.template_bluetooth_listview_element, null);
Device = null;
Device = (CircularProgressButton) vi.findViewById(R.id.CircularProgressButton_BluetoothListElement);
HashMap<String, String> category = new HashMap<String, String>();
category = data.get(position);
TAG = (category.get("TAG"));
MAC = (category.get("MAC"));
Device.setText(TAG + "\n" + MAC);
Device.setIdleText(TAG + "\n" + MAC);
if(GlobalActivity.CurrentDeviceTAG.equals(TAG) && GlobalActivity.CurrentDeviceMAC.equals(MAC) && position == GlobalActivity.CurrentDevicePosition) { // if the selected device is the one i am connected
if (GlobalActivity.BluetoothConnectionStatus == GlobalActivity.STATE_CONNECTED) {
Device.setIndeterminateProgressMode(false);
Device.setProgress(100); // -- update GUI Element
}
if (GlobalActivity.BluetoothConnectionStatus == GlobalActivity.STATE_NONE) {
Device.setIndeterminateProgressMode(false);
Device.setProgress(0); // -- update GUI Element
}
}
return vi;
}
}
BLUETOOTH FRAGMENT CODE(在公共静态int中尝试连接时保存位置):
public void BluetoothStateChanged(int position){
Adapter.getView(position, null, null);
Adapter.notifyDataSetChanged();
BluetoothDeviceListView.setAdapter(Adapter);
}
以上方法由状态变更上的蓝牙服务处理程序调用 - 这个更新是GUI元素。
抱歉我的英语不好和解释。我有27H没睡觉。
我真的需要解决这个问题。
感谢您的时间
请求更新 - LISTVIEW项目布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#424242">
<com.dd.CircularProgressButton
android:id="@+id/CircularProgressButton_BluetoothListElement"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_marginTop="16dp"
android:textColor="#FFFFFF"
android:textSize="18sp"
app:cpb_cornerRadius="48dp"
app:cpb_iconComplete="@drawable/ic_action_accept"
app:cpb_iconError="@drawable/ic_action_cancel"
android:focusable="false"
android:clickable="false" />
</LinearLayout>
答案 0 :(得分:1)
您需要创建一个带有进度条的类,每当您在getView()中创建一个视图时,都将此持有者类设置为标记。
请参阅以下代码:
<div id="loaderText">
<p>Please wait while downloading data.</p><br />
<p>This may take a few minutes.</p>
</div>
答案 1 :(得分:0)
public void BluetoothStateChanged(){
int start = BluetoothDeviceListView.getFirstVisiblePosition();
for(int i = start, j = BluetoothDeviceListView.getLastVisiblePosition(); i<=j; i++) {
View view = BluetoothDeviceListView.getChildAt(i - start);
if ((BluetoothDeviceListView.getItemAtPosition(i)) != null) {
BluetoothDeviceListView.getAdapter().getView(i, view, BluetoothDeviceListView); // Tell the adapter to update this view
}
}
}