나는 안드로이드 개발에 초보자입니다. 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);
}
}
}