搜索结果在列表视图中显示两次

时间:2013-01-31 08:56:28

标签: android json listview search

我想在我的应用程序中使用搜索参数在列表视图中显示MySql中的数据。 我已经成功了,但我遇到的问题是,每次按下搜索按钮两次,两组结果数据都显示在ListView中,而我只想显示最新的结果集。

这是我正在使用的代码:

public class ListPerusahaan extends ListActivity {
    /** Called when the activity is first created. */

    private static final String TAG_ID = "id";
    private static final String TAG_NAMA = "nama_perusahaan";
    private static final String TAG_PEKERJAAN = "pekerjaan";
    private static final String TAG_ALAMAT= "alamat";
    private static final String TAG_DEADLINE = "deadline";

            EditText keyword;   Button search;  private ProgressDialog pDialog;     ArrayList<HashMap<String, String>> DataList;    // JSONArray  perusahaan = null;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listperusahaan);
        keyword=(EditText)findViewById(R.id.Editsearch);
       search=(Button)findViewById(R.id.search);

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


        search.setOnClickListener(new View.OnClickListener()
        {

            @Override           public void onClick(View v) {
                // TODO Auto-generated method stub

                if (keyword.getText().toString().length() == 0 ) {

                     Toast toast = Toast.makeText(getApplicationContext(),"Please enter your keyword", Toast.LENGTH_SHORT);
                     toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
                     toast.show();
                 }
                else {

                new searchData().execute();

                }
                            }

        });

    }

    @SuppressLint("NewApi")     public class searchData extends AsyncTask<Void, Void, Void>
        {

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

           @Override
           protected Void doInBackground(Void... params) {
               // TODO Auto-generated method stub

             // ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
              List<NameValuePair> paramemeter = new ArrayList<NameValuePair>();
              paramemeter.add(new BasicNameValuePair("keyword", keyword.getText().toString()));

                JSONObject json = JSONParser.getJSONFromUrl("http://10.0.2.2/appmysql/dataperusahaan.php", paramemeter);

                try{

                    JSONArray  perusahaan = json.getJSONArray("perusahaan");


                    if (perusahaan != null)
                   {
                    for(int i=0;i<perusahaan.length();i++){
                        // HashMap<String, String> map1 = new HashMap<String, String>();

                        JSONObject jsonobj = perusahaan.getJSONObject(i);

                         // Storing each json item in variable
                        String id = jsonobj.getString(TAG_ID);
                        String nama_perusahaan = jsonobj.getString(TAG_NAMA);
                        String pekerjaan = jsonobj.getString(TAG_PEKERJAAN);
                        String alamat = jsonobj.getString(TAG_ALAMAT);
                        String deadline = jsonobj.getString(TAG_DEADLINE);

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

                        // adding each child node to HashMap key => value
                        map1.put(TAG_ID, id);
                        map1.put(TAG_NAMA, nama_perusahaan);
                        map1.put(TAG_PEKERJAAN, pekerjaan);
                        map1.put(TAG_ALAMAT, alamat);
                        map1.put(TAG_DEADLINE, deadline);

                        // adding HashList to ArrayList
                       DataList.add(map1);



                        }


                    }

                    else {

                        Toast toast= Toast.makeText(getApplicationContext(),  "No data found", Toast.LENGTH_SHORT);  
                       toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
                       toast.show();
                    }

                }

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

               return null;

           }

           @Override
           protected void onPostExecute(Void result) {
               // TODO Auto-generated method stub
              pDialog.dismiss();
            // updating UI from Background Thread
              runOnUiThread(new Runnable() {
                public void run() {
                    /**
                     * Updating parsed JSON data into ListView
                     * */

                    ListAdapter adapter = new SimpleAdapter(
                            ListPerusahaan.this, DataList,R.layout.row,
                              new String[] { TAG_NAMA, TAG_PEKERJAAN, TAG_ALAMAT, TAG_DEADLINE },
                              new int[] { R.id.nama_perusahaan, R.id.pekerjaan, R.id.alamat,R.id.deadline});

                    // updating listview
                    setListAdapter(adapter);

                     final ListView lv = getListView();
                        lv.setTextFilterEnabled(true);
                        lv.setOnItemClickListener(new OnItemClickListener() {
                            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                /*
                                @SuppressWarnings("unchecked")
                                HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
                                 Toast.makeText(ListPerusahaan.this, "Perusahaan '" + o.get("nama_perusahaan") + "' was clicked.", Toast.LENGTH_SHORT).show(); 
                                */

                                // getting values from selected ListItem
                                String nama = ((TextView) view.findViewById(R.id.nama_perusahaan)).getText().toString();
                                String pekerjaan = ((TextView) view.findViewById(R.id.pekerjaan)).getText().toString();
                                String alamat = ((TextView) view.findViewById(R.id.alamat)).getText().toString();
                                String deadline = ((TextView) view.findViewById(R.id.deadline)).getText().toString();

                                // Starting new intent
                                Intent in = new Intent(getApplicationContext(), detail_lowongan.class);
                                in.putExtra(TAG_NAMA, nama);
                                in.putExtra(TAG_PEKERJAAN, pekerjaan);
                                in.putExtra(TAG_ALAMAT, alamat);
                                in.putExtra(TAG_DEADLINE, deadline);
                                startActivity(in);
                            }
                        });

                }
            });

           }

        }
    }

2 个答案:

答案 0 :(得分:0)

在for循环中填充之前清除ArrayList类型的DataList。

答案 1 :(得分:0)

编辑:在onclick上清除DataList

search.setOnClickListener(){
......

DataList.clear(); //in onclick method
}

我不确定您是否正在寻找此...但如果您不想在列表中允许重复,请尝试....

当列表中填写数据时

Set<type> set=new Hashset(yourlist);
ArrayList<type> nodupList=new ArrayList<type>();
noduplist.addAll(set);

使用这种方式,它将删除列表中的重复项

编辑: 试试这个

for for循环

Set<HashMap> set=new HashSet(DataList);
ArrayList<HashMap> nodupList=new ArrayList<HashMap>();
nodupList.addAll(set);
DataList.clear();
DataList.addAll(nodupList);

试试它可以帮到你