2014年12月25日木曜日

AppCompat v7 の version 21 では、Fragment 入れ替えに
android.R.id.content を使ってはいけない

FragmentTransaction.replace() で android.R.id.content に MainFragment を入れる処理です。

public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new MainFragment(), "MainFragment") .commit(); } public static class MainFragment extends ListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setListAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, new String[]{"test1", "test2", "test2"})); } } }
AppCompat v7 の version 19 だと普通に MainFragment が表示されます。 apply plugin: 'com.android.application' android { compileSdkVersion 19 buildToolsVersion "21.1.1" defaultConfig { applicationId "net.yanzm.sample2" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName "1.0" } ... } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.+' }



しかし、AppCompat v7 の version 21 にすると、でない! apply plugin: 'com.android.application' android { compileSdkVersion 21 ... defaultConfig { ... targetSdkVersion 21 ... } ... } dependencies { ... compile 'com.android.support:appcompat-v7:21.0.3' }

悲しみ。。。

レイアウトファイルを用意すれば表示されるけど。。。 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" /> public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportFragmentManager() .beginTransaction() .replace(R.id.content, new MainFragment(), "MainFragment") .commit(); } ... }


バグなんだろうか。。。

↓多分同じこと言ってる http://stackoverflow.com/questions/27460502/appcompat-v7-android-5-0-actionbaractivity-textview-not-visible





追記: getSupportActionBar() を呼ぶと表示された。。。謎い。 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // これを呼ぶと表示される!なぜだ! getSupportActionBar(); getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new MainFragment(), "MainFragment") .commit(); } ... }


0 件のコメント:

コメントを投稿