0

나는 안드로이드 개발에 초보자입니다. CardView를 사용하여 recycleView가있는 응용 프로그램을 만듭니다. inside cardview 하나의 TextView와 One Switch 버튼을 사용하고 있습니다. 서버에 대한 버튼 값을 변경하면 거기에 업데이트됩니다.발리 대응 후 Viewholder 클래스를 업데이트하는 방법

모든 발리 대응을 위해 내 ViewHolder 클래스를 업데이트하는 방법을 알고 싶습니다. 왜냐하면 ViewHolder가 nextTime으로 업데이트되지 않기 때문에 서버에서는 값이 변경되지 않지만 스위치 버튼은 측면을 변경하기 때문입니다.

MainClass.java

public class Light extends Fragment { 

public static final String light_url = "http://192.168.0.7:8080/bizzonthego/Android/device_status.php"; 
private List<ItemList> LightList; 
private RecyclerView recyclerView; 
private RecyclerView.LayoutManager layoutManager; 
private RecyclerView.Adapter adapter; 

View v; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    v = inflater.inflate(R.layout.light, container, false); 

    recyclerView = (RecyclerView) v.findViewById(R.id.recyclerView); 
    recyclerView.setHasFixedSize(true); 
    layoutManager = new LinearLayoutManager(getActivity()); 
    recyclerView.setLayoutManager(layoutManager); 


    LightList = new ArrayList<>(); 
    new Handler().postAtTime(new Runnable() { 
     @Override 
     public void run() { 

      getData(); 

     } 
    }, 1000); 



    return v; 
} 

@Override 
public void onStart() { 
    super.onStart(); 

} 

@Override 
public void onResume() { 
    super.onResume(); 
//  new Handler().postDelayed(new Runnable() { 
//   @Override 
//   public void run() { 
// 
//    getData(); 
// 
//   } 
//  }, 1000); 
} 

private void getData() 
{ 

final ProgressDialog loading = ProgressDialog.show(getActivity(), "Loading Data", "Please wait...", false, false); 
    JsonArrayRequest jsonArrayRequest =new JsonArrayRequest(light_url, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 


      loading.dismiss(); 
      parseData(response); 


     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        loading.dismiss(); 
        Toast.makeText(getActivity(),"error to connect",Toast.LENGTH_SHORT).show(); 

       } 
      }); 

    RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 

    //Adding request to the queue 
    requestQueue.add(jsonArrayRequest); 

} 
private void parseData(JSONArray array){ 


    for(int i = 0; i<array.length(); i++) { 
     ItemList lightValue = new ItemList(); 
     JSONObject json = null; 
     try { 
      json = array.getJSONObject(i); 
      String battery = json.getString("device"); 
      String status = json.getString("status"); 


      lightValue.setItem(battery); 
      lightValue.setStatus(status); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     LightList.add(lightValue); 
    } 



    //Finally initializing our adapter 
    adapter = new CardView(LightList,getActivity()); 
    adapter.notifyDataSetChanged(); 

    //Adding adapter to recyclerview 
    recyclerView.setAdapter(adapter); 

    } 
} 

ViewHolder.java

public class CardView extends RecyclerView.Adapter<CardView.ViewHolder>{ 

List<ItemList> items; 
private Context context; 
public static final String POST_SWITCH_URL = "http://192.168.0.7:8080/bizzonthego/Android/device_control.php"; 



public CardView(List<ItemList> item, Context context){ 
    super(); 
//  items = new ArrayList<ItemList>(); 
//     ItemList item = new ItemList(); 
//   item.setItem(names); 
// 
//   items.add(item); 
    this.items = item; 
    this.context =context; 

} 


@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.permisies_cardview, parent, false); 
    ViewHolder viewHolder = new ViewHolder(v); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(final ViewHolder holder, int position) { 
    final ItemList list = items.get(position); 

    holder.textViewName.setText(list.getItem()); 
    final String device = list.getItem(); 

    if(list.getStatus().equals("0")) 
    { 
     holder.mySwitch.setChecked(false); 
     holder.mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       StringRequest stringRequest = new StringRequest(Request.Method.POST,POST_SWITCH_URL , 
         new Response.Listener<String>() { 
          @Override 
          public void onResponse(String s) { 

           Toast.makeText(context, s, Toast.LENGTH_LONG).show(); 


          } 
         }, 
         new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError volleyError) { 


           //Showing toast 
           Toast.makeText(context, "error to connect", Toast.LENGTH_LONG).show(); 
          } 
         }) { 
        @Override 
        protected java.util.Map<String, String> getParams() throws AuthFailureError { 

         Map<String, String> params = new Hashtable<String, String>(); 
         final String control = "1"; 

         params.put("device",device); 
         params.put("control",control); 




         return params; 
        } 
       }; 

       //Creating a Request Queue 
       RequestQueue requestQueue = Volley.newRequestQueue(context); 

       //Adding request to the queue 

       requestQueue.add(stringRequest); 

      } 
     }); 


    } else if(list.getStatus().equals("1")) 
    { 
     holder.mySwitch.setChecked(true); 
     holder.mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       StringRequest stringRequest = new StringRequest(Request.Method.POST,POST_SWITCH_URL , 
         new Response.Listener<String>() { 
          @Override 
          public void onResponse(String s) { 

           Toast.makeText(context, s, Toast.LENGTH_LONG).show(); 


          } 
         }, 
         new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError volleyError) { 


           //Showing toast 
           Toast.makeText(context, "error to connect", Toast.LENGTH_LONG).show(); 
          } 
         }) { 
        @Override 
        protected java.util.Map<String, String> getParams() throws AuthFailureError { 

         Map<String, String> params = new Hashtable<String, String>(); 
         final String control = "0"; 

         params.put("device",device); 
         params.put("control",control); 




         return params; 
        } 
       }; 

       //Creating a Request Queue 
       RequestQueue requestQueue = Volley.newRequestQueue(context); 

       //Adding request to the queue 
       requestQueue.add(stringRequest); 

      } 
     }); 


    } 




} 

@Override 
public int getItemCount() { 
    return items.size(); 
} 

class ViewHolder extends RecyclerView.ViewHolder{ 

    public TextView textViewName; 
    public SwitchCompat mySwitch; 


    public ViewHolder(View itemView) { 
     super(itemView); 


     textViewName = (TextView) itemView.findViewById(R.id.textViewName); 
     mySwitch = (SwitchCompat) itemView.findViewById(R.id.switchbtn); 

    } 
} 

} 

답변

1

먼저,에서 onCreate 방법에 어댑터를 생성하고 유지 :

mAdapter = new CardView(getActivity()); 
recyclerView.setAdapter(mAdapter); 

만들기 에 대한 새로운 방법 당신이 당신의 서비스에서 응답을받을 때

mAdapter.updateItems(...); 

마지막으로, 당신은 단지 updateItems라는 메소드를 호출하고이 도움이

mAdapter.notifyDataSetChanged(); 

희망으로 변경을 통지해야 어댑터가 같은 데이터를 업데이트합니다!

0

BindViewHolder 내에서 스위치의 태그를 설정하여 목록 항목 업데이트를 위해 클릭 한 항목을 찾아야합니다.

**holder.mySwitch.setTag(position);** 

당신이 도착 했더라면 발리 응답 한 후에 업데이트하여 ITEMLIST

holder.mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      **final CompoundButton mySwitch=buttonView;** 
       StringRequest stringRequest = new StringRequest(Request.Method.POST,POST_SWITCH_URL , 
         new Response.Listener<String>() { 
          @Override 
          public void onResponse(String s) { 

           Toast.makeText(context, s, Toast.LENGTH_LONG).show(); 
          //Got success response from volley 

**int sPosition=mySwitch.getTag(); 
items.get(sPosition).setItem("YOUR TEXT"); 
notifyDataSetChanged();** 


          } 
         }, 
         new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError volleyError) { 


           //Showing toast 
           Toast.makeText(context, "error to connect", Toast.LENGTH_LONG).show(); 
          } 
         }) { 
        @Override 
        protected java.util.Map<String, String> getParams() throws AuthFailureError { 

         Map<String, String> params = new Hashtable<String, String>(); 
         final String control = "0"; 

         params.put("device",device); 
         params.put("control",control); 




         return params; 
        } 
       }; 

       //Creating a Request Queue 
       RequestQueue requestQueue = Volley.newRequestQueue(context); 

       //Adding request to the queue 
       requestQueue.add(stringRequest); 

      } 
     }); 
관련 문제