Java – Change the ListView

Change the ListView… here is a solution to the problem.

Change the ListView

I

want to use a custom List adapter in this example so I can get the benefits of getView().
Then get the id of the button in the ListView .

This allows me to retrieve (name_id) student from the database using the delete button as a list.

I want to implement delete so that when the user hits delete, it will fetch the student id > and delete it from thedatabase.

How do I change the adapter here to a custom list adapter?

My code is as follows:

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 not to change the adapter, I can create an id for each button.
Because I heard that I have to use a custom list adapter….

Solution

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 View with their IDs, etc.

Another way to eliminate the need for a custom adapter (simpler but not preferred) is to manually map all entries to locations in the list. (Since you can provide an array of elements, you can just use the position to get the object). That is, if you just want to connect buttons, you can have onClick record the position of the elements, and then when they press the button, you can make the right move by accessing the array.

Edit:

Do it in your onCreate:

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.
});

Then execute delete(selected_student) in your onClickListener button;

Related Problems and Solutions