I have adapter with 10 elements, when i use
listView.setAdapter(userAdapter);
Each elements in adapter is indicate multiple times, how to block this behaw? In each adapter i have http request
Fragment activity:
userAdapter = new UserModDevListCustomAdapter(getActivity(), R.layout.model_details_leg_list, userArray);
listView = view.findViewById(R.id.f2_mod_list);
listView.setItemsCanFocus(false);
listView.setAdapter(userAdapter);
getView in adapter:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
UserHolder holder = null;
mDatabaseHelper = new DatabaseHelper(context);
preferences = getContext().getSharedPreferences("DevDetails", MODE_PRIVATE);
preferencesLog = getContext().getSharedPreferences("Login", MODE_PRIVATE);
restoreData();
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new UserHolder();
holder.textName = row.findViewById(R.id.f2_listmod_name);
holder.textValue = row.findViewById(R.id.f2_value_name);
holder.textAddress = row.findViewById(R.id.f2_serialmod_name_edit);
holder.btnEdit = row.findViewById(R.id.f2_btnmod_button);
row.setTag(holder);
} else {
holder = (UserHolder) row.getTag();
}
final UserModDevList user = data.get(position);
holder.textName.setText(user.getName());
holder.textAddress.setText(user.getAddress());
holder.textValue.setText(R.string.set_loading);
final String devID = user.getUrl();
if(mDatabaseHelper.getType(devID).equals("meter")){
final UserHolder finalHolder = holder;
String hosty4 = "http://" + shost + "/xxx/" + mDatabaseHelper.getValue(devID) + "?alt=json";
AsyncHttpClient client = new AsyncHttpClient();
client.addHeader("Cookie", stoken);
client.get(hosty4, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] responseBody) {
JSONObject response = null;
try {
response = new JSONObject(new String(responseBody));
JSONObject table = response.getJSONObject("present-value");
JSONObject table2 = response.getJSONObject("units");
if(table.getString("value").isEmpty() && table2.getString("value").isEmpty()){
finalHolder.textValue.setText(R.string.set_db_update_err);
}else{
finalHolder.textValue.setText(table.getString("value") + "\n" + table2.getString("value"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] responseBody, Throwable error) {
finalHolder.textValue.setText(R.string.set_db_update_err);
}
});
}else{
holder.textValue.setText("");
}
holder.btnEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//some code
}
});
return row;
}
This is my log from Android Studio:
E/MODEL: 10 - number of elements in array
D/skia: jpeg_decoder mode 1, colorType 4, w 552, h 828, sample 1, bsLength 0!!
E/NAZWA: ELE_003
E/NAZWA: ELE_002
E/NAZWA: ELE_000_1
E/NAZWA: ELE_000_2
E/NAZWA: ELE_001
E/NAZWA: ELE_004
E/NAZWA: ELE_005
E/NAZWA: ELE_006
E/NAZWA: GAS_000
E/NAZWA: ELE_000_3
E/NAZWA: ELE_003
E/NAZWA: ELE_002
E/NAZWA: ELE_000_1
E/NAZWA: ELE_000_2
E/NAZWA: ELE_001
E/NAZWA: ELE_004
E/NAZWA: ELE_005
E/NAZWA: ELE_006
E/NAZWA: GAS_000
W/libEGL: [ANDROID_RECORDABLE] format: 1
D/mali_winsys: new_window_surface returns 0x3000
E/NAZWA: ELE_003
E/NAZWA: ELE_002
E/NAZWA: ELE_000_1
E/NAZWA: ELE_000_2
E/NAZWA: ELE_001
E/NAZWA: ELE_004
E/NAZWA: ELE_005
E/NAZWA: ELE_006
E/NAZWA: GAS_000
E/NAZWA: ELE_003
E/NAZWA: ELE_002
E/NAZWA: ELE_000_1
E/NAZWA: ELE_000_2
E/NAZWA: ELE_001
E/NAZWA: ELE_004
E/NAZWA: ELE_005
E/NAZWA: ELE_006
E/NAZWA: GAS_000
I/[MALI][Gralloc]: [+]r_hnd(0x7f695153c0), client(41), share_fd(152)
I/[MALI][Gralloc]: [+]r_hnd(0x7f69518480), client(41), share_fd(155)
V/InputMethodManager: onWindowFocus: null softInputMode=272 first=true flags=#81810100
V/InputMethodManager: START INPUT: com.android.internal.policy.PhoneWindow$DecorView{2bf01ee V.E...... R.....ID 0,0-720,1280} ic=null tba=EditorInfo { packageName=pl.deltacontrols.ewebfmmobile, inputType=0x0, imeOptions=0x0, privateImeOptions=null } controlFlags=#104
D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 4
D/SQLiteDatabase: beginTransaction()
D/SQLiteDatabase: endTransaction()
E/NAZWA: ELE_003
D/SQLiteDatabase: beginTransaction()
D/SQLiteDatabase: endTransaction()
E/NAZWA: ELE_002
E/NAZWA: ELE_000_1
E/NAZWA: ELE_000_2
E/NAZWA: ELE_001
E/NAZWA: ELE_004
E/NAZWA: ELE_005
E/NAZWA: ELE_006
E/NAZWA: GAS_000
E/NAZWA: ELE_000_3
E/NAZWA: ELE_003
E/NAZWA: ELE_002
E/NAZWA: ELE_000_1
E/NAZWA: ELE_000_2
E/NAZWA: ELE_001
E/NAZWA: ELE_004
E/NAZWA: ELE_005
E/NAZWA: ELE_006
E/NAZWA: GAS_000
The main problem is the app starting lagging when load value multiple times from request