2016-04-13 7 views
1

içinde sembol hatayı gidermek olamaz. MainActivity $ ForecastFragment "> ForecastFragment parçası kırmızıyüzden fragment_ ana xml Sembolü çözemezse söyleyerek bu hata mesajını var ve bu kodun</p> <p>araçları bu hat üzerinde çıkageldi xml düzeni (Udacity Sunshine Ders 2)

'dadır. Uygulamanın hala iyi çalıştığını lütfen unutmayın, kodumun sadece bir kısmı kırmızıdır ve hata mesajı vardır. Bunu nasıl düzeltebilirim? Bu uygulamayı inşa ederken bu benim kod etkileyecek mi? Aşağıda iki java ana aktivite, ForecastFragment ve xml dosyaları vardır. Temiz Kod'u denedim ve hatayı düzeltmedi. Lütfen burada yeniyim.

package com.example.android.sunshine.app; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

/** 
* Encapsulates fetching the forecast and displaying it as a {@link ListView} layout. 
*/ 





    public class ForecastFragment extends Fragment { 

    private ArrayAdapter<String> mForecastAdapter; 

    public ForecastFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     // Create some dummy data for the ListView. Here's a sample weekly forecast 
     String[] data = { 
       "Mon 6/23 - Sunny - 31/17", 
       "Tue 6/24 - Foggy - 21/8", 
       "Wed 6/25 - Cloudy - 22/17", 
       "Thurs 6/26 - Rainy - 18/11", 
       "Fri 6/27 - Foggy - 21/10", 
       "Sat 6/28 - TRAPPED IN WEATHERSTATION - 23/18", 
       "Sun 6/29 - Sunny - 20/7" 
     }; 
     List<String> weekForecast = new ArrayList<String>(Arrays.asList(data)); 

     // Now that we have some dummy forecast data, create an ArrayAdapter. 
     // The ArrayAdapter will take data from a source (like our dummy forecast) and 
     // use it to populate the ListView it's attached to. 
     mForecastAdapter = 
       new ArrayAdapter<String>(
         getActivity(), // The current context (this activity) 
         R.layout.list_item_forecast, // The name of the layout ID. 
         R.id.list_item_forecast_textview, // The ID of the textview to populate. 
         weekForecast); 

     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

     // Get a reference to the ListView, and attach this adapter to it. 
     ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast); 
     listView.setAdapter(mForecastAdapter); 

     return rootView; 
    } 

    public class FetchWeatherTask extends AsyncTask<Void, Void, Void> { 

     private final String LOG_TAG = FetchWeatherTask.class.getSimpleName(); 

     @Override 
     protected Void doInBackground(Void... params) { 
      // These two need to be declared outside the try/catch 
      // so that they can be closed in the finally block. 
      HttpURLConnection urlConnection = null; 
      BufferedReader reader = null; 

      // Will contain the raw JSON response as a string. 
      String forecastJsonStr = null; 

      try { 
       // Construct the URL for the OpenWeatherMap query 
       // Possible parameters are avaiable at OWM's forecast API page, at 
       // http://openweathermap.org/API#forecast 
       String baseUrl = "http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7"; 
       String apiKey = "&APPID=" + BuildConfig.OPEN_WEATHER_MAP_API_KEY; 
       URL url = new URL(baseUrl.concat(apiKey)); 

       // Create the request to OpenWeatherMap, and open the connection 
       urlConnection = (HttpURLConnection) url.openConnection(); 
       urlConnection.setRequestMethod("GET"); 
       urlConnection.connect(); 

       // Read the input stream into a String 
       InputStream inputStream = urlConnection.getInputStream(); 
       StringBuffer buffer = new StringBuffer(); 
       if (inputStream == null) { 
        // Nothing to do. 
        return null; 
       } 
       reader = new BufferedReader(new InputStreamReader(inputStream)); 

       String line; 
       while ((line = reader.readLine()) != null) { 
        // Since it's JSON, adding a newline isn't necessary (it won't affect parsing) 
        // But it does make debugging a *lot* easier if you print out the completed 
        // buffer for debugging. 
        buffer.append(line + "\n"); 
       } 

       if (buffer.length() == 0) { 
        // Stream was empty. No point in parsing. 
        return null; 
       } 
       forecastJsonStr = buffer.toString(); 
      } catch (IOException e) { 
       Log.e(LOG_TAG, "Error ", e); 
       // If the code didn't successfully get the weather data, there's no point in attemping 
       // to parse it. 
       return null; 
      } finally { 
       if (urlConnection != null) { 
        urlConnection.disconnect(); 
       } 
       if (reader != null) { 
        try { 
         reader.close(); 
        } catch (final IOException e) { 
         Log.e(LOG_TAG, "Error closing stream", e); 
        } 
       } 
      } 
      return null; 
     } 
    } 
} 

İşte Burada Ana Aktivite Kod

package com.example.android.sunshine.app; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 


    public class MainActivity extends ActionBarActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      if (savedInstanceState == null) { 
       getSupportFragmentManager().beginTransaction() 
         .add(R.id.container, new ForecastFragment()) 
         .commit(); 
      } 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.main, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      // Handle action bar item clicks here. The action bar will 
      // automatically handle clicks on the Home/Up button, so long 
      // as you specify a parent activity in AndroidManifest.xml. 
      int id = item.getItemId(); 

      //noinspection SimplifiableIfStatement 
      if (id == R.id.action_settings) { 
       return true; 
      } 

      return super.onOptionsItemSelected(item); 
     } 


    } 

var Fragment_main xml dosyası hatası bu hat araçları üzerinde geçerli: bağlam = "MainActivity $ ForecastFragment"> o ForecastFragment sembolü çözemezse söylüyor. Sadece ForecastFragment parçası kırmızı renktedir. ForecastFragment MainActivity bir iç sınıfı olmadığı için

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:paddingLeft="@dimen/activity_horizontal_margin" 

      android:paddingRight="@dimen/activity_horizontal_margin" 
      android:paddingTop="@dimen/activity_vertical_margin" 
      android:paddingBottom="@dimen/activity_vertical_margin" 
      tools:context=".MainActivity$ForecastFragment"> 

    <ListView 
     android:id="@+id/listview_forecast" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</FrameLayout> 

cevap

0
tools:context=".MainActivity$ForecastFragment" 

sizin XML kod satırı kırmızıdır. Çalışan kodunuzu etkilemez çünkü araçları: context özniteliği yalnızca düzen önizlemesinde/düzenleyicisinde görüntülenecek temayı belirlemek için IDE tarafından kullanılır. Aşağıda

http://tools.android.com/tech-docs/tools-attributes

araçlardan açıklama: Bağlam

Bu nitelik, tipik bir düzen XML kök elemanı ayarlanır düzeni ile ilişkili aktivite dosya ve kayıtlar ( designtime'da, açıkça bir düzen birden fazla düzeni tarafından kullanılabilir). Bu, örneğin, düzenler Manifest'te tanımlandığı ve düzenlerle değil etkinliklerle ilişkili olduğu için varsayılan temasını tahmin etmek için düzen düzenleyicisi tarafından kullanılacaktır.

İlgili konular