4

List adapterこの例ではカスタムを使用して、リストビューのボタンのIDgetView()を 取得してから取得できるようにします。

これにより、データベースから(name_id)学生をボタン付きのリストとして取得できるようになりdeleteます。

deleteそして、ユーザーがクリックしたときに学生deleteを取得してデータベースから削除する ように実装したいと思います。id

ここでアダプターをカスタムリストアダプターに変更するにはどうすればよいですか?

私のコードは次のとおりです。

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 

        } 


    }
}

アダプターを変更せずに簡単な方法があれば、idボタンごとにを作成できることに注意してください。カスタムリストアダプタを使用する必要があると聞いたので...

4

2 に答える 2

2

ここでsetListAdapterを使用して、ListActivityのカスタムアダプターを使用します。http://developer.android.com/reference/android/app/ListActivity.html#setListAdapter(android.widget.ListAdapter

その後、IDなどでビューにタグを付けることができます。

カスタムアダプタなしでそれを行う別の方法(より単純ですが、好ましくありません)は、リスト上の位置を使用してすべてのエントリを手動でマップすることです。(要素の配列を指定できるため、位置を使用してオブジェクトを取得できます)。そうは言っても、単にボタンを接続したい場合は、onClickを使用して要素の位置を記録し、ボタンを押したときに配列にアクセスして正しく反応することができます。

編集:

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

次に、ボタンonClickListenerで、delete(selected_student);を実行します。

于 2012-10-09T15:51:27.647 に答える
1

リストにはクリックリスナーが必要です。

これが例です。

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()


                });

必要なのはそれだけです!

于 2012-10-09T15:57:14.460 に答える