Я пытаюсь обновить конкретный элемент в представлении списка без обновления всего списка (ясно объяснено ниже). Для этого требования я почти все под паром идеи, которые доступны в Интернете, но я не получил решенияОбновить определенный элемент в виде списка
Объяснение:
Я имел различные элементы в виде списка (см прикрепленного изображения). Для этого просмотра списка я храню идентификаторы и другие связанные данные, используя класс модели (класс POJO). В этом же проекте я использую push-уведомление. В этом push-уведомлении я получаю идентификатор элемента, который отображается в моем списке. В соответствии с id я должен показать некоторое изображение в виде списка. Для этого требования, если я обновляю весь вид списка, я могу изменить изображение, но не хочу обновлять весь список списка. Итак, я хочу изменить изображение перкулярного элемента в виде списка в соответствии с идентификатором, который я получаю от push-уведомления.
изображение
Пример кода (я использую парование пример кода для заполнения вид списка)
активность
public class EventMyEventHosting extends AppCompatActivity {
ArrayList<EventMyEventHostingItems> itemsaArrayList;
EventMyEventHostingAdapter2 itemsAdapter;
TextView tvNoEvents;
ListView listView;
boolean connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapt_refresh);
itemsaArrayList = new ArrayList<EventMyEventHostingItems>();
itemsAdapter = new EventMyEventHostingAdapter2(EventMyEventHosting.this, R.layout.lv_my_events_hosting_adapter, itemsaArrayList);
// (EventMyEventHosting.this,itemsaArrayList);
listView = (ListView) findViewById(R.id.lv_events_my_event_hosting);
listView.setAdapter(itemsAdapter);
tvNoEvents = (TextView) findViewById(R.id.tv_events_my_event_hosting_no_events);
loadDetailsVolley();
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
/*Intent intent = new Intent(EventMyEventHosting.this, EventMyEventDetail.class);
intent.putExtra("eventID", itemsaArrayList.get(position).getEventID());
startActivity(intent);*/
}
});
}
public void loadDetailsVolley(){
final ProgressDialog dialog = ProgressDialog.show(EventMyEventHosting.this, null, null);
ProgressBar spinner = new android.widget.ProgressBar(EventMyEventHosting.this, null, android.R.attr.progressBarStyle);
spinner.getIndeterminateDrawable().setColorFilter(Color.parseColor("#009689"), android.graphics.PorterDuff.Mode.SRC_IN);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(spinner);
dialog.setCancelable(false);
dialog.show();
String eventMyEventHostingURL = "MyApi";
Log.e("eventMyEventHostingURL", eventMyEventHostingURL);
StringRequest request = new StringRequest(Request.Method.POST, eventMyEventHostingURL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
dialog.dismiss();
if(response != null && !response.startsWith("<HTML>")){
Log.e("eventHostingURLOnResponse", response);
try {
JSONArray jsonArray = new JSONArray(response);
if(jsonArray.length() > 0){
for(int i = 0; i < jsonArray.length(); i++){
JSONObject singleJsonObj = jsonArray.getJSONObject(i);
String postID = singleJsonObj.getString("id");
String title = singleJsonObj.getString("name");
String dateAndTime = singleJsonObj.getString("event_time");
String address = singleJsonObj.getString("address");
String isActive = singleJsonObj.getString("is_active");
String bgImage = singleJsonObj.getJSONObject("event_cover").getString("url");
EventMyEventHostingItems items = new EventMyEventHostingItems();
items.setEventID(postID);
items.setIsActive(isActive);
items.setTitleMyEvent(title);
items.setTimeMyEvent(dateAndTime);
items.setLocationMyEvent(address);
items.setImageMyEvent(bgImage);
itemsaArrayList.add(items);
itemsAdapter.notifyDataSetChanged();
}
}else {
tvNoEvents.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
}
} catch (JSONException e) {
e.printStackTrace();
}
}else{
Toast.makeText(EventMyEventHosting.this, "Please check your Internet connection...",Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
dialog.dismiss();
if(error != null){
Log.e("error", error.toString());
}else{
}
}
});
RequestQueue queue = Volley.newRequestQueue(EventMyEventHosting.this);
queue.add(request);
queue.getCache().remove(eventMyEventHostingURL);
}
}
адаптер
public class EventMyEventHostingAdapter2 extends ArrayAdapter<EventMyEventHostingItems> {
private Context context;
@SuppressWarnings("unused")
private List<EventMyEventHostingItems> items;
String eventIdForVol;
private EventMyEventHostingAdapter2 adapter;
/*
To remove item from list (Deleting the particular item)
items.remove(rowItem);
adapter.notifyDataSetChanged();
// This is to show the no records found message
import static com.app.hire.MatchedCandidates.listView;
import static com.app.hire.MatchedCandidates.tvNoRecords;
if(items.size() == 0){
listView.setVisibility(View.GONE);
tvNoRecords.setVisibility(View.VISIBLE);
}
*/
/*
(This is for calling the Activity or fragment method from adapter)
===================================================================
http://stackoverflow.com/a/24502482
From your activity/Fragment initialize adapter like
---------------------------------------------------
customAdapter = new CustomAdapter(myContext, android.R.layout.simple_list_item_1, getList, HomeFragment.this); //HomeFragment.this for fragment
In your adapter
--------------
public CustomAdapter(Context context, int id, HomeFragment fragment) {
this.fragment = fragment;
}
method calling
--------------
fragment.doSomething();
*/
public EventMyEventHostingAdapter2(Context context, int resource) {
super(context, resource);
this.context = context;
}
public EventMyEventHostingAdapter2(Context context, int resource, int textViewResourceId) {
super(context, resource, textViewResourceId);
this.context = context;
}
public EventMyEventHostingAdapter2(Context context, int resource, EventMyEventHostingItems[] objects) {
super(context, resource, objects);
this.context = context;
}
public EventMyEventHostingAdapter2(Context context, int resource, int textViewResourceId, EventMyEventHostingItems[] objects) {
super(context, resource, textViewResourceId, objects);
this.context = context;
}
public EventMyEventHostingAdapter2(Context context, int resource, List<EventMyEventHostingItems> objects) {
super(context, resource, objects);
this.context = context;
this.items = objects;
this.adapter = this;
}
public EventMyEventHostingAdapter2(Context context, int resource, int textViewResourceId, List<EventMyEventHostingItems> objects) {
super(context, resource, textViewResourceId, objects);
this.context = context;
this.items = objects;
this.adapter = this;
}
@SuppressLint("InflateParams") @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
final EventMyEventHostingItems rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null){
convertView = mInflater.inflate(R.layout.lv_my_events_hosting_adapter, null);
holder = new ViewHolder();
holder.eventImage = (ImageView) convertView.findViewById(R.id.iv_my_events_hosting_bg);
holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_events_hosting_adpt_title);
holder.tvTime = (TextView) convertView.findViewById(R.id.tv_events_hosting_adpt_time);
holder.tvLocation = (TextView) convertView.findViewById(R.id.tv_events_hosting_adpt_city);
holder.rlEnable = (RelativeLayout) convertView.findViewById(R.id.rl_events_hosting_adpt_enable);
holder.rlDisable = (RelativeLayout) convertView.findViewById(R.id.rl_events_hosting_adpt_disable);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
if(rowItem.getIsActive().equalsIgnoreCase("true")){
holder.rlDisable.setVisibility(View.VISIBLE);
holder.rlEnable.setVisibility(View.GONE);
}else {
holder.rlDisable.setVisibility(View.GONE);
holder.rlEnable.setVisibility(View.VISIBLE);
}
if(rowItem.getTitleMyEvent().equals(null) || rowItem.getTitleMyEvent().equals("")){
holder.tvTitle.setText("-");
}else {
holder.tvTitle.setText(rowItem.getTitleMyEvent());
}
if(rowItem.getTimeMyEvent().equals(null) || rowItem.getTimeMyEvent().equals("")){
holder.tvTime.setText("-");
}else {
holder.tvTime.setText(rowItem.getTimeMyEvent());
}
if(rowItem.getLocationMyEvent().equals(null) || rowItem.getLocationMyEvent().equals("")){
holder.tvLocation.setText("-");
}else {
holder.tvLocation.setText(rowItem.getLocationMyEvent());
}
if(rowItem.getImageMyEvent().equals(null) || rowItem.getImageMyEvent().equals("")){
}else {
Glide.with(context).load(rowItem.getImageMyEvent()).placeholder(R.drawable.loading_img).error(R.drawable.bg_480_800).into(holder.eventImage);
}
final ViewHolder finalHolder = holder;
holder.rlDisable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
eventIdForVol = rowItem.getEventID();
Log.e("eventIdForVol", eventIdForVol);
disableVolley(finalHolder);
}
});
holder.rlEnable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
eventIdForVol = rowItem.getEventID();
Log.e("eventIdForVol", eventIdForVol);
enableVolley(finalHolder);
}
});
return convertView;
}
private class ViewHolder {
ImageView eventImage;
TextView tvTitle;
TextView tvTime;
TextView tvLocation;
RelativeLayout rlEnable;
RelativeLayout rlDisable;
}
}
Pojo класс
public class EventMyEventHostingItems {
private String eventID;
private String imageMyEvent;
private String isActive;
private String titleMyEvent;
private String timeMyEvent;
private String locationMyEvent;
private String interestedMyEvent;
public String getEventID() {
return eventID;
}
public void setEventID(String eventID) {
this.eventID = eventID;
}
public String getIsActive() {
return isActive;
}
public void setIsActive(String isActive) {
this.isActive = isActive;
}
public String getImageMyEvent() {
return imageMyEvent;
}
public void setImageMyEvent(String imageMyEvent) {
this.imageMyEvent = imageMyEvent;
}
public String getTitleMyEvent() {
return titleMyEvent;
}
public void setTitleMyEvent(String titleMyEvent) {
this.titleMyEvent = titleMyEvent;
}
public String getTimeMyEvent() {
return timeMyEvent;
}
public void setTimeMyEvent(String timeMyEvent) {
this.timeMyEvent = timeMyEvent;
}
public String getLocationMyEvent() {
return locationMyEvent;
}
public void setLocationMyEvent(String locationMyEvent) {
this.locationMyEvent = locationMyEvent;
}
public String getInterestedMyEvent() {
return interestedMyEvent;
}
public void setInterestedMyEvent(String interestedMyEvent) {
this.interestedMyEvent = interestedMyEvent;
}
}
Пожалуйста, уменьшите это до короткого, но полного примера, демонстрирующего проблему. Нет необходимости в этом количестве кода –