1

データベース(MySQL)から学生情報(id -number- name)をリストビューとして取得します。各学生には2つのボタン(delete-alert)とラジオボタンがあります。

スクリーンショットhttp://im21.gulfup.com/1pWi1.png

すべて問題ありませんが、たとえば削除ボタンのようにonClickListenerを作成するにはどうすればよいですか?多くの例を試しているので、コードのようにonClickListenerを使用できると聞きました(カスタムリスト、ビューの取得、またはコードのようにonClickListenerを指示します(ただし、そうではありません)。動作中)またはSimple Cursor Adapter)何を使用すればよいかわからないので、役立つ例を探しましたが、私の場合は見つかりませんでした。同じ問題を抱えている人の参考になることを願っています。これは、SimpleAdapterで直接onClickを使用する私のコードです

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; 
Button delete;

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";
String cl;
// 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";
private static final String  TAG_Avatar="Avatar";
HashMap<String, String> selected_student;
// course JSONArray
JSONArray student = null;

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

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

        ListView list1 = getListView();
        list1.setAdapter(getListAdapter());  
        list1.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {

                 selected_student =(HashMap<String, String>) studentList.get(pos); //member of your activity.
                 delete =(Button)view.findViewById(R.id.DeleteStudent);
                 cl=selected_student.get(TAG_StudentID);
                 Toast.makeText(getBaseContext(),cl,Toast.LENGTH_LONG).show();
                 delete.setOnClickListener(new View.OnClickListener()

                    {

                        public void onClick(View v) {

                            Log.d("id: ",cl);
                            Toast.makeText(getBaseContext(),cl,Toast.LENGTH_LONG).show();
                        }
                 });
            }

        });

        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);
                     //   String Avatar = c.getString(TAG_Avatar);
                        // 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 

        } 
    }
}

では、なぜ削除ボタンが機能しないのでしょうか。ログキャットにエラーはありません。別の方法は何ですか?

4

3 に答える 3

0

ボタンのonclickリスナーをあなたListViewのonclicklistenerの外で定義するだけです-

delete =(Button)view.findViewById(R.id.DeleteStudent); // initialize this here

list1.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) 
    {
        selected_student =(HashMap<String, String>) studentList.get(pos); //member of your activity.
        cl=selected_student.get(TAG_StudentID);
        Toast.makeText(getBaseContext(),cl,Toast.LENGTH_LONG).show();
    }
});

delete.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View v) {
        Log.d("id: ",cl);
        Toast.makeText(getBaseContext(),cl,Toast.LENGTH_LONG).show();
    }
});

あなたのコードから、あなたListViewのアイテムが一度クリックされたときにそれは機能します、そしてあなたのボタンだけが機能します。したがって、上記のコードを試してください。

于 2012-10-11T07:54:40.177 に答える
0

@saraコードは非常に正しいですが、context正しく渡されていないため、機能していません。

今このコードを使用すると、確実に機能します:

 ListView list1 = getListView();
    list1.setAdapter(getListAdapter());  
    list1.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {

             selected_student =(HashMap<String, String>) studentList.get(pos); //member of your activity.
             delete =(Button)view.findViewById(R.id.DeleteStudent);
             cl=selected_student.get(TAG_StudentID);
             Toast.makeText(getBaseContext(),cl,Toast.LENGTH_LONG).show();
             delete.setOnClickListener(new View.OnClickListener()

                {

                    public void onClick(View v) {

                        Log.d("id: ",cl);
                        Toast.makeText(ManageSection.this,cl,Toast.LENGTH_LONG).show();
                    }
             });
        }

    });

この行をurコードに追加しました:

  Toast.makeText(ManageSection.this,cl,Toast.LENGTH_LONG).show();

今それが機能しているかどうか教えてみてください。

于 2012-10-12T11:20:24.197 に答える
0

ボタンの onclicklistener を ListView の onclicklistener の外に追加します -

list1.setAdapter(new (youradaptername)(getApplicationContext()));
list1.setOnItemClickListener(detaillistener);


private OnItemClickListener detaillistener = new OnItemClickListener()
     {
     // to your Onclick action coding here
     }
     };

他のボタンについても同じようにします。詳細については、こちらのリンクにアクセスしてください

于 2012-10-11T08:08:31.810 に答える