dimanche 11 septembre 2016

Android checkbox event in listview

I am creating an android app with a listview with checkboxes in it. I want to do something when a checkbox is clicked, but i don't know how to do this. I already tried a few things, but nothing worked. I hope somebody can help me.

My code

CustomListView

public class CustomListView extends Activity {

RequestQueue requestQueue;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.todo_activity_main);

    loadTasks();
}

public void loadTasks() {
    ArrayList<SearchResults> searchResults = GetSearchResults();

    final ListView lv1 = (ListView) findViewById(R.id.ListView01);
    lv1.setAdapter(new MyCustomBaseAdapter(this, searchResults));

    lv1.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
            Object o = lv1.getItemAtPosition(position);
            SearchResults fullObject = (SearchResults)o;
            Toast.makeText(CustomListView.this, "You have chosen: " + " " + fullObject.getName(), Toast.LENGTH_LONG).show();
        }
    });

    try {
        Thread.sleep(200);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    requestQueue = Volley.newRequestQueue(this);
}

private ArrayList<SearchResults> GetSearchResults(){
    final ArrayList<SearchResults> results = new ArrayList<SearchResults>();

    // Create request queue
    RequestQueue requestQueue= Volley.newRequestQueue(this);
    //  Create json array request
    JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.POST,"http://ift.tt/2c3MI4x",new Response.Listener<JSONArray>(){
        public void onResponse(JSONArray jsonArray){
            // Successfully download json
            // So parse it and populate the listview
            for(int i=0;i<jsonArray.length();i++){
                try {
                    JSONObject jsonObject=jsonArray.getJSONObject(i);
                    SearchResults sr1 = new SearchResults();
                    sr1.setName(jsonObject.getString("description"));
                    sr1.setCityState(jsonObject.getString("id"));
                    results.add(sr1);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Log.e("Error", "Unable to parse json array");
        }
    });

    requestQueue.add(jsonArrayRequest);
    return results;
    }
}

MyCustomBaseAdapter

public class MyCustomBaseAdapter extends BaseAdapter {
private static ArrayList<SearchResults> searchArrayList;

private LayoutInflater mInflater;

public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
    searchArrayList = results;
    mInflater = LayoutInflater.from(context);
}

public int getCount() {
    return searchArrayList.size();
}

public Object getItem(int position) {
    return searchArrayList.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.item_todo, null);
        holder = new ViewHolder();
        holder.txtName = (TextView) convertView.findViewById(R.id.name);
        holder.txtCityState = (TextView) convertView.findViewById(R.id.cityState);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtName.setText(searchArrayList.get(position).getName());
    holder.txtCityState.setText(searchArrayList.get(position).getCityState());

    return convertView;
}

static class ViewHolder {
    TextView txtName;
    TextView txtCityState;
    }
}

SearchResults

public class SearchResults {
private String name = "";
private String cityState = "";
private String phone = "";

public void setName(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public void setCityState(String cityState) {
    this.cityState = cityState;
}

public String getCityState() {
    return cityState;
    }
}

XML files:

todo_actitity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://ift.tt/nIICcg"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:theme="@style/AppTheme">
<ListView
    android:id="@+id/ListView01"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    />
</LinearLayout>

item_todo

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://ift.tt/nIICcg"
          android:orientation="horizontal"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:padding="10dp"
          android:descendantFocusability="blocksDescendants">

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/todoCheckBox"
    android:checked="false"/>

<TextView android:id="@+id/name"
          android:textSize="18sp"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:ellipsize="end"
          android:maxLines="1"/>
<TextView android:id="@+id/cityState"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:visibility="invisible"/>

</LinearLayout>

Thank you for your help.




Aucun commentaire:

Enregistrer un commentaire