2017-09-29 8 views
-1

ランドスケープモードでメニューオプション項目を選択すると、動作しないようですが、プログレスローダーがありますが、ポートレートモードではメニュー項目オプションを選択できます新しいローダーをロードし、アイテムをグリッドビューに表示します。 LANSCAPE MODDE IN enter image description hereアンドロイドデバイスがランドスケープモードのメニューで動作しないとき

enter image description here

進んローダーが続くと、あなたがバックポートレートモードにそれを回転させるまで終わらないと何が起こるか

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<MovieImageData>>{ 

private final String LOG_TAG = MainActivity.class.getSimpleName(); 
//API KEY 
private static final String API_KEY = ""; 

private static final String BASE_SORT_URL = "http://api.themoviedb.org/3/movie"; 
//Popular movie query 
private static final String POPULAR_MOVIES_TAG = "/popular?api_key="; 
//Top rated movie query 
private static final String TOP_RATED_MOVIES_TAG = "/top_rated?api_key="; 

private static final String POPULAR_MOVIES_URL = BASE_SORT_URL + POPULAR_MOVIES_TAG + API_KEY; 
private static final String TOP_RATED_MOVIES_URL = BASE_SORT_URL + TOP_RATED_MOVIES_TAG + API_KEY; 

private static String currentURL = POPULAR_MOVIES_URL; 
static boolean hasLoaderOne = false; 
MoviePosterAdapter adapter; 
GridView moviePosterGridView; 

View progress; 

private static ArrayList<MovieImageData> movieData; 

//Movie base 
private static final String MOVIEDB_BASE_URL = "http://api.themoviedb.org/3/movie"; 
//Image base URL 
private static final String MOVIEDB_IMAGE_BASE = "http://image.tmdb.org/t/p/w185/"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    progress = findViewById(R.id.loading_spinner); 

    if(savedInstanceState == null || !savedInstanceState.containsKey("movie")) { 
     Log.i(LOG_TAG, "Ent======================================================================"); 
     progress.setVisibility(View.GONE); 
     getLoaderManager().initLoader(0, null, this).forceLoad(); 
    }else { 

     movieData = savedInstanceState.getParcelableArrayList("movie"); 
     updateUi(movieData); 
    } 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.settings, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 

     case R.id.popular: 
      currentURL = POPULAR_MOVIES_URL; 
      getLoaderManager().getLoader(0).forceLoad(); 
      progress.setVisibility(View.VISIBLE); 
      hasLoaderOne = false; 
      return true; 


    case R.id.top_rated: 

      currentURL = TOP_RATED_MOVIES_URL; 
      getLoaderManager().initLoader(1, null, this).forceLoad(); 
      hasLoaderOne = true; 
      progress.setVisibility(View.VISIBLE); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putParcelableArrayList("movie", movieData); 
    super.onSaveInstanceState(outState); 
} 

@Override 
public Loader<List<MovieImageData>> onCreateLoader(int id, Bundle args) { 
    Log.i(LOG_TAG, "LOADER============================"); 
    progress.setVisibility(View.VISIBLE); 
    return new MovieImageLoader(MainActivity.this, currentURL); 
} 

@Override 
public void onLoadFinished(Loader<List<MovieImageData>> loader, List<MovieImageData> data) { 
    progress.setVisibility(View.GONE); 
    movieData = new ArrayList<MovieImageData>(); 
    movieData.addAll(data); 
    updateUi(movieData); 
} 

@Override 
public void onLoaderReset(Loader<List<MovieImageData>> loader) { 
    progress.setVisibility(View.GONE); 
    moviePosterGridView.setAdapter(null); 
} 

public void updateUi(final List<MovieImageData> moviePosterData){ 

    // Create a new {@link ArrayAdapter} of earthquakes 
    adapter = new MoviePosterAdapter(this, moviePosterData); 

    TextView noItemFound = (TextView) findViewById(R.id.no_list); 
    // Find a reference to the {@link ListView} in the layout 
    moviePosterGridView = (GridView) findViewById(R.id.gridview); 
    moviePosterGridView.setEmptyView(noItemFound); 

    if(!isOnline()){ 
     noItemFound.setVisibility(View.VISIBLE); 
    }else{ 
     //noItemFound.setText("No earthquakes found!"); 
    } 


    // Set the adapter on the {@link ListView} 
    // so the list can be populated in the user interface 
    moviePosterGridView.setAdapter(adapter); 
} 

public boolean isOnline() { 
    ConnectivityManager cm = 
      (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    return netInfo != null && netInfo.isConnectedOrConnecting(); 
} 

} 

IMAGES。

+0

あなたはどこにそれを隠していますか(進行状況)?また、それはローダーの完全な誤用です...あなたは 'forceLoad'(むしろ' initLoader'/'restartLoader')を呼び出すべきではありません...' outState'に 'movieData'を格納すべきではありません(ローダーは、 'initLoader'を再度呼び出すと、新しいインスタンスを作成せずに' onLoadFinished'を呼び出す必要があります) – Selvin

+0

2回目のLoaderを初めて呼び出すときに、onOptionsItemSelected(MenuItem項目)で初期化しました。これを達成する最良の方法は何と言いますか? – user2070739

+0

私は、あなたがデバイスの向きを変更したときに、アクティビティが必要な値を再作成しないと思う。 android:configChanges = "orientation | screenSize"この行をMainActivity宣言内のマニフェストファイルに入れてみてください。 –

答えて

1
Try this, 

<activity 
    android:name=".MainActivity" 
    android:configChanges="orientation|screenSize" 
    /> 
関連する問題