Autore Topic: Come implementare Search Interface con listFragment  (Letto 504 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Come implementare Search Interface con listFragment
« il: 24 Luglio 2013, 17:14:37 CEST »
0
Ragazzi é da ieri che cerco di venirne a capo, ma sono sempre e solo piú confuso.

Ho una lista di POI in un fragment  ed una actionbar con il searchwidget abilitato.

Activity
Codice (Java): [Seleziona]
import android.os.Bundle;
import android.widget.Toast;

import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.twentyci.santafegroup.R;

public class ListPoiActivity extends SherlockFragmentActivity {
       
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.list_poi_activity);
               
         
         
//         getSupportFragmentManager().beginTransaction().
//                 replace(R.id.listPoiFragment,ListPoiFragment.newInstance()).commit();
//        
//         ActionBar actionBar = getSupportActionBar();
//         actionBar.setTitle("Find Nearest");
//         actionBar.setIcon(R.drawable.ic_navigation_previous_item);
//         actionBar.setHomeButtonEnabled(true);
        }
       
         @Override
     public boolean onCreateOptionsMenu(Menu menu) {
             // Inflate the menu; this adds items to the action bar if it is present.
             getSupportMenuInflater().inflate(R.menu.search, menu);
             return true;
     }
       
        //NEW
          @Override
          public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.action_search:
              Toast.makeText(this, "Action search selected", Toast.LENGTH_SHORT)
                  .show();
              break;
             default:
             this.finish();
              break;
            }
           
            return true;
          }
         
       
}

Fragment
Codice (Java): [Seleziona]
import java.util.ArrayList;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.app.SherlockListFragment;
import com.twentyci.santafegroup.R;

import SupportClass.BasicItem;
import SupportClass.BasicItemAdapter;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class ListPoiFragment extends SherlockListFragment {

                  private String [] poi_array;
                  private ArrayList<BasicItem> list;
                  private Button bBack;
                 
                  private EditText edSearchPoint;
                 
                  private Intent intent;
                 
                  // GPSTracker class
                  private GPSTracker gps;

               
                 
                 
                  @Override
                  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                      Bundle savedInstanceState) {
                    View view = inflater.inflate(R.layout.list_poi_fragment,
                        container, false);
                 // Set title
                   
                    ActionBar actionBar =  ((SherlockFragmentActivity) getActivity()).getSupportActionBar();
                   
                    actionBar.setTitle(R.string.find_nearest);
                actionBar.setIcon(R.drawable.ic_navigation_previous_item);
                actionBar.setHomeButtonEnabled(true);
                 

                   poi_array =  getResources().getStringArray(R.array.poi_array);
                   list = new ArrayList<BasicItem>();
                   for(int i = 0;i < poi_array.length;i++)
                   {
                           BasicItem item = new BasicItem();
                           item.setName(poi_array[i].toString());
                           list.add(item);
                   }
                   

                   final BasicItemAdapter adapter = new BasicItemAdapter(getActivity(),R.layout.row_list_poi, list);


                   // Assign adapter to ListView
                   setListAdapter(adapter);
                   //Generate list View from ArrayList
                    return view;
                  }
                 
                  @Override
                  public void onListItemClick(ListView l, View v, int position, long id) {
                    // Do something with the data
                         
                          BasicItem b = (BasicItem) getListView().getItemAtPosition(position);
                         
                          String poi = b.getName().toString();
                          Log.i("","POI" + poi);
                          poi = poi.toLowerCase();
                          poi = poi.replaceAll("\\s", "_");
                          Log.i("","Poi" + poi.toString());
                          gps = new GPSTracker(getActivity());
                                 
                        // check if GPS enabled  
                          if(gps.canGetLocation()){
                          intent = new Intent(getActivity(), ListSelectedPoiActivity.class);
                                  intent.putExtra("poi", poi);
                                 startActivity(intent);

                        }else{
                            // can't get location
                            // GPS or Network is not enabled
                            // Ask user to enable GPS/network in settings
                                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                                builder.setTitle("GPS is settings")
                                                        .setMessage("GPS is not enabled. Do you want to go to settings menu?")
                                                .setPositiveButton("Settings",
                                                    new DialogInterface.OnClickListener() {
                                                        public void onClick(DialogInterface dialog, int whichButton) {
                                                                 Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                                                                 startActivity(intent);
                                                             
                                                        }
                                                    }
                                                )
                                                .setNegativeButton("Cancel",
                                                    new DialogInterface.OnClickListener() {
                                                        public void onClick(DialogInterface dialog, int whichButton) {
                                                            dialog.dismiss();
                                                        }
                                                    }
                                                )
                                                .create().show();
                        }
                 
                         
                         
                         
                 }
                 
}

Vorrei implementare la ricerca dei POI.

Sto seguendo la guida ufficiale http://developer.android.com/guide/topics/search/search-dialog.html#SearchableConfiguration.

Nella guida si parla di creare una classe specifica,che magari estenda ListView, per effettuare la ricerca.

1a Domanda
Devo creare una nuova classe o posso usare la ListPoiActivity?

2a Domanda
Come implementare la ricerca?

Ho girato il web in lungo e largo e non sono riuscito a trovare una soluzione.
Potete illuminarmi?