sara
sara

Reputation: 81

change list view

I want to use custom List adapter in this example so that I can get the benefit of getView() and then get the id for the buttons in list view.

So that I will be able to retrieve (name_id) student from database as list with delete buttons.

And I want to implement delete so that when a user clicks delete it will take the id of student and delete it from database.

How can I change my adapter here to a custom List adapter?

My code is the following:

public class ManageSection extends ListActivity {

//ProgresogressDialog pDialog;

    private ProgressDialog pDialog;

    // Creating JSON Parser object

// Creating JSON Parser object
JSONParser jParser = new JSONParser(); //class
boolean x =true; 

ArrayList<HashMap<String, String>> studentList;

//url to get all products list
private static String url_all_student = "http://10.0.2.2/SmsPhp/view_student_info.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_student = "student";
private static final String TAG_StudentID = "StudentID";
private static final String TAG_StudentNo = "StudentNo";
private static final String TAG_FullName = "FullName";
// course JSONArray
JSONArray student = null;
private TextView mDateDisplay;
private int mYear;
private int mMonth;
private int mDay;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.manage_section);
        mDateDisplay = (TextView) findViewById(R.id.day);

        // add a click listener to the button

        // get the current date

        final Calendar c = Calendar.getInstance();
       mYear = c.get(Calendar.YEAR);
      mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);
        mDateDisplay.setText(mDay+"-"+mMonth+"-"+mYear);


        studentList = new ArrayList<HashMap<String, String>>();



     // on seleting single course
        // launching Edit course Screen
         // on seleting single course
           // launching Edit course Screen




        new LoadAllstudent().execute();


    }


    /**
     * Background Async Task to Load all student by making HTTP Request
     * */
    class LoadAllstudent extends AsyncTask<String, String, String>
    {

        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(ManageSection.this);
            pDialog.setMessage("Loading student. Please wait...");
            pDialog.setIndeterminate(false);
                  }




        /**
         * getting All student from u r l
         * */
        @Override
        protected String doInBackground(String... args) {
            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url_all_student, "GET", params);

            // Check your log cat for JSON response
            Log.d("All student : ", json.toString());

            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1)
                {
                    // student found
                    // Getting Array of course
                    student = json.getJSONArray(TAG_student);

                    // looping through All courses
                    for (int i = 0; i < student.length(); i++)//course JSONArray
                    {
                        JSONObject c = student.getJSONObject(i); // read first

                        // Storing each json item in variable
                        String StudentID = c.getString(TAG_StudentID);
                        String StudentNo = c.getString(TAG_StudentNo);
                        String FullName = c.getString(TAG_FullName);

                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        map.put(TAG_StudentID, StudentID);
                        map.put(TAG_StudentNo, StudentNo);
                        map.put(TAG_FullName, FullName);

                        // adding HashList to ArrayList
                        studentList.add(map);
                    }
                } else {
                    x=false;

                }

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

            return null;
        }   

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String file_url) { 
              // dismiss the dialog after getting all products 
              pDialog.dismiss(); 
              if (x==false)
                Toast.makeText(getBaseContext(),"no student" ,Toast.LENGTH_LONG).show();

              ListAdapter adapter = new SimpleAdapter( 
                      ManageSection.this,  studentList, 
                        R.layout.list_student, new String[] { TAG_StudentID, 
                              TAG_StudentNo,TAG_FullName}, 
                        new int[] { R.id.StudentID, R.id.StudentNo,R.id.FullName}); 
               setListAdapter(adapter); 

             // Updating parsed JSON data into ListView 

        } 


    }
}

Note that if there is an easy way without changing the adapter I could make an id for each button. Because I heard that I must use custom list adapter...

Upvotes: 4

Views: 124

Answers (2)

Edison
Edison

Reputation: 5971

Use setListAdapter here to use a custom adapter for your ListActivity: http://developer.android.com/reference/android/app/ListActivity.html#setListAdapter(android.widget.ListAdapter)

You will then be able to tag your views with their Ids etc.

Another way to do it without a custom adapter (simpler but not preferred) is to map all the entries manually with the position on the list. (since you can supply an array of elements, you can just use the position to get the object). That being said, if you simply want to hook up the buttons, you can let onClick to record the position of the element and then when they press the button you can react correctly by accessing the array.

EDIT:

In your onCreate do:

getListView().setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> parent, View view, final int pos, long id){
    selected_student=studentList.get(pos); //member of your activity.
});

And then in your button onClickListener you just do delete(selected_student);

Upvotes: 2

programmer33
programmer33

Reputation: 652

You will need a click listener for your list!

Here is an example;

list.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) {
                //get your information through array.get(arg0), find and delete in database, delete from your arraylist here, then call adapter.notifyDataSetChanged()


                });

That is all you need!

Upvotes: 1

Related Questions