2017-06-21 8 views
1

私は比較的新しいコーディングですが、私には負担してください。私はGoogle Mapをナビゲーションドロワーに入れようとしています。フラグメントを使用するのが最善の方法だと思っていましたが、私はさまざまな試みにもかかわらず、このエラーが発生しています。 "エラー:(35、62)エラー:互換性のないタイプ:MapsActivityをフラグメントに変換できません。NavigationDrawerでGoogleマップを使用するにはどうすればよいですか?

私は2つのアクティビティを持っています 1. MainActiyity:どこにエラーがありますか。 2. MapsActivity:Androidスタジオの新しいプロジェクト作成時にGoogleマップアプリを作成する際のデフォルトのアクティビティです。

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 

import android.support.v4.app.FragmentActivity; 


public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener {  

NavigationView navigationView = null; 
Toolbar toolbar = null; 

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

    // Set to start with fragment 
    MapsActivity fragment = new MapsActivity(); 
    android.support.v4.app.FragmentTransaction fragmentTransaction = 
      getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, fragment); 
    fragmentTransaction.commit(); 


    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@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(); 
    return super.onOptionsItemSelected(item); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_building) { 
     MapsActivity fragment = new MapsActivity(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = 
       getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container, fragment); 
     fragmentTransaction.commit(); 

    } else if (id == R.id.nav_map) { 

    } else if (id == R.id.nav_timetable) { 

    } else if (id == R.id.nav_noticeboard) { 

    } else if (id == R.id.nav_settings) { 

    } else if (id == R.id.nav_placeholder) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 
} 

また、fragmentTransaction.replace(R.id.fragment_container、fragment)の中の「fragment」という単語。 には赤色の下線が引かれています。 私はさまざまなチュートリアルやガイドを見つけようとしましたが、何も私の問題を解決しませんでした。

答えて

1

アクティビティを使用してFragmentTransactionを実行することはできません。

NavigationDrawerでGoogleマップを使用するには、SupportMapFragmentを拡張するフラグメントを使用し、MapsActivityクラスが現在持っているすべての機能を追加します。

使用これを起動するには、次のフラグメントを使用するようにこれを変更し、活動に続いて

public class MapsFragment extends SupportMapFragment 
     implements OnMapReadyCallback { 

    GoogleMap mGoogleMap; 

    @Override 
    public void onResume() { 
     super.onResume(); 

     setUpMapIfNeeded(); 
    } 

    private void setUpMapIfNeeded() { 

     if (mGoogleMap == null) { 
      getMapAsync(this); 
     } 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) 
    { 
     mGoogleMap=googleMap; 
     mGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    } 

} 

// Set to start with fragment 
MapsFragment fragment = new MapsFragment(); 
android.support.v4.app.FragmentTransaction fragmentTransaction = 
     getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.fragment_container, fragment); 
fragmentTransaction.commit(); 
関連する問題