2015-07-22 3 views
-2

Я новичок в android. Я создал представление списка в своем приложении. Я хочу добавить кнопку возврата на панели действий. Я много пробовал, но не смог это сделать. Ниже приведен фрагмент кода, который я использовал:Как получить панель действий?

public class Home extends ListActivity { 

    private ProgressDialog pDialog; 

    // URL to get contacts JSON 
    private static String url = "http://api-11hr.anovatesoft.com/v1/list"; 

    // JSON Node names 
    private static final String TAG_CONTACTS = "contacts"; 
    private static final String TAG_USERNAME = "username"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_EMAIL = "email"; 
    private static final String TAG_ADDRESS = "address"; 
    private static final String TAG_CONTACT_NUMBER = "contactnumber"; 
    private static final String TAG_POSTAL_CODE = "postalcode"; 
    private static final String TAG_IMAGE = "image"; 
    SessionManager session; 
    private double latitude; 
    private double longitude; 
    private String apikey; 
    private String status; 
    GPSTracker gps; 


    // contacts JSONArray 
    JSONArray contacts = null; 

    // Hashmap for ListView 
    ArrayList<HashMap<String, String>> contactList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 
     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 

     AlertDialog.Builder alertDialog2 = new AlertDialog.Builder(
       Home.this); 

// Setting Dialog Title 
     alertDialog2.setTitle("Too quiet?"); 

// Setting Dialog Message 
     alertDialog2.setMessage("Follow your favourite merchants and see what deals they're launching at the 11th Hour!"); 



// Setting Positive "Yes" Btn 
     alertDialog2.setPositiveButton("YES", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         // Write your code here to execute after dialog 

         dialog.cancel(); 

        } 
       }); 


     alertDialog2 .show(); 






     Gps_func(); 


     // Session class instance 
     session = new SessionManager(getApplicationContext()); 

     // get user data from session 
     HashMap<String, String> user = session.getUserDetails(); 


     // apikey 
     // Calling Application class (see application tag in AndroidManifest.xml) 
     final GlobalClass globalVariable = (GlobalClass) getApplicationContext(); 

     //Set name and email in global/application context 
     apikey = globalVariable.getApikey(); 


     latitude = globalVariable.getLatitude(); 
     longitude = globalVariable.getLongitude(); 
     status = globalVariable.getStatus(); 



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

     ListView lv = getListView(); 

     // Listview on item click listener 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       // getting values from selected ListItem 

       String cost = ((TextView) view.findViewById(R.id.email)) 
         .getText().toString(); 


       // Starting single contact activity 
       Intent in = new Intent(getApplicationContext(), 
         Adds.class); 

       in.putExtra(TAG_EMAIL, cost); 

       startActivity(in); 

      } 
     }); 

     // Calling async task to get json 
     new GetContacts().execute(); 
    } 

    private void Gps_func() { 

     gps = new GPSTracker(Home.this); 

     // check if GPS enabled 
     if (gps.canGetLocation()) { 

      double latitude = gps.getLatitude(); 
      double longitude = gps.getLongitude(); 

      // \n is for new line 
      // Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 
      Log.d("tag", "Longitude:\n" + longitude + "\n Latitude: \n" + latitude); 

     } else { 
      // can't get location 
      // GPS or Network is not enabled 
      // Ask user to enable GPS/network in settings 
      gps.showSettingsAlert(); 

      if (gps.canGetLocation()) { 
       double latitude = gps.getLatitude(); 
       double longitude = gps.getLongitude(); 

       // \n is for new line 
       // Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 
       Log.d("tag", "Longitude:\n" + longitude + "\n Latitude: \n" + latitude); 

      } 
     } 

    } 


    @Override 
    protected void onRestart() { 
     super.onRestart(); 
     Gps_func(); 
    } 

    /** 
    * Async task class to get json by making HTTP call 
    */ 
    private class GetContacts extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      pDialog = new ProgressDialog(Home.this); 
      pDialog.setMessage("Please wait...."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 

     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      // Creating service handler class instance 
      ServiceHandler1 sh = new ServiceHandler1(apikey, latitude, longitude); 


      // Making a request to url and getting response 
      String jsonStr = sh.makeServiceCall(url, ServiceHandler1.POST); 

      Log.d("Response: ", "> " + jsonStr); 


      if (jsonStr != null) { 
       try { 
        JSONObject jsonObj = new JSONObject(jsonStr); 

        // Getting JSON Array node 
        contacts = jsonObj.getJSONArray(TAG_CONTACTS); 

        // looping through All Contacts 
        for (int i = 0; i < contacts.length(); i++) { 
         JSONObject c = contacts.getJSONObject(i); 

         String username = c.getString(TAG_USERNAME); 
         String name = c.getString(TAG_NAME); 
         String email = c.getString(TAG_EMAIL); 
         String address = c.getString(TAG_ADDRESS); 
         String gender = c.getString(TAG_CONTACT_NUMBER); 
         String postalcode = c.getString(TAG_POSTAL_CODE); 


         // tmp hashmap for single contact 
         HashMap<String, String> contact = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 

         contact.put(TAG_EMAIL, email); 


         // adding contact to contact list 
         contactList.add(contact); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } else { 
       Log.e("ServiceHandler", "Couldn't get any data from the url"); 
      } 

      return null; 
     } 


     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      // Dismiss the progress dialog 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 
      /** 
      * Updating parsed JSON data into ListView 
      * */ 
      ListAdapter adapter = new SimpleAdapter(
        Home.this, contactList, 
        R.layout.list_item1, new String[]{TAG_EMAIL, 
      }, new int[]{ 
        R.id.email,}); 

      setListAdapter(adapter); 
     } 
     public boolean onOptionsItemSelected(MenuItem item){ 
      Intent myIntent = new Intent(getApplicationContext(),Home.class); 
      startActivityForResult(myIntent, 0); 
      return true; 
     } 

    } 


} 

Он бросает NullPointerException ... Пожалуйста, дайте мне совершенное решения. Это бревно, которое показано ниже:

Невозможно запустить активность ComponentInfo {com.example.kmi_dev.fbloginsample/com.example.kmi_dev.fbloginsample.Home}: java.lang.NullPointerException

+0

положить logcat.maybe и нужно использовать getSupportActionBar InstEd –

+2

Если вы используете библиотеку поддержки вам нужно использовать getSupportActionBar ( – dsharew

+0

Проверьте файл манифеста и тему, а также оператор импорта в java-файле, в котором вы используете поддерживаемую панель приложений или приложение. – MPG

ответ

1

Прежде всего, вы будете использовать только getSupportActionBar() если ваша деятельность расширяет ActionBarActivity, так что в вашем случае, вы должны использовать getActionBar(), как вы делали. Проблема может быть в вашем Theme. Удостоверьтесь в вашем AndroidManifest.xml, если вы не используете что-то вроде android:theme="@android:style/Theme.Holo.Light.NoActionBar", потому что это может вызвать nullexception. В дополнение к тому, что вы сделали, вам нужно добавить

getActionBar().setHomeButtonEnabled(true); 

перед тем

getActionBar().setDisplayHomeAsUpEnabled(true); 
+0

он дает следующую ошибку ................. ..... Попытка вызвать виртуальный метод 'void android.app.ActionBar.setHomeButtonEnabled (булево)»на нулевой ссылки на объект –

+0

Убедитесь, что если' getActionBar() 'не придет нулевой –

+0

«ActionBar ActionBar = getActionBar(); getActionBar() setHomeButtonEnabled (истина);. actionBar.setDisplayHomeAsUpEnabled (истина); " Я использовал этот код –

0

Если вы используете библиотека поддержки вам необходимо использовать getSupportActionBar().

Попробуйте это:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 
     ActionBar actionBar = getActionBar(); 
     if(actionBar == null) 
        actionBar = getActionBarSupport(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
} 

Кроме того убедитесь, что эти две вещи:
1. Вы не имеете это на вашем проявляется при объявлении активность:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 

2. Ваша деятельность не является дочерним (это не диалог), удалите, если вы добавили это из манифест если добавить при объявлении активности:

android:theme="@android:style/Theme.Dialog" 
+0

Что вы подразумеваете под этим? Вышеупомянутый код пытается получить панель действий, как обычно, используя getActionBar() bu t, если это retuns null, то это означает, что вы используете библиотеку поддержки и отбрасываете goTusing getActionBarSupport(). – dsharew

+0

он бросает такую ​​же ошибку. –

+0

Вы проверили мой обновленный ответ, пожалуйста, прочтите примечания к заключению. – dsharew

Смежные вопросы