私は、を含むActivity
いくつかのデータを取得して表示する必要がある単純なものを書いています。問題は、どのメソッドも呼び出されていないように見えるため、アクセスできないことです。Fragment
ListView
ListView
on*
フラグメントには、LinearLayout
のコードによって動的に入力されるがありますonCreateView
。はinをActivity
作成し、 returned byを使用してレイアウトに追加します(補足:私はsupport-v4ライブラリを使用しています)。Fragment
onCreate
FragmentManager
getSupportFragmentManager
//メソッドにいくつかのLog.d
呼び出しを追加すると、それらのいずれも呼び出されていないことが明確に示されます。onAttach
onCreate
onCreateView
私は何が間違っているのですか?
アクティビティ:
public class CharactersActivity extends FragmentActivity {
private MainCharactersFragment mainFragment = null;
private String[] charnames = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// R.layout.characters contains only a LinearLayout with id characters_fragment_container
setContentView(R.layout.characters);
if (mainFragment == null) {
mainFragment = new MainCharactersFragment();
//Add the fragment to the activity's layout.
//Taken from Google's tutorials.
getSupportFragmentManager().beginTransaction()
.add(R.id.characters_fragment_container, mainFragment).commit();
//I'd expect onCreateView to be called during this commit, but it is not called.
}
//Loads some data to display
Intent intent = getIntent();
String[] filenames = intent.getStringArrayExtra(PortableDnDActivity.CHARACTERS_FILENAMES);
this.charnames = new String[filenames.length];
for (int i=0; i < filenames.length; i++) {
this.charnames[i] = getCharacterName(filenames[i]);
}
}
@Override
public void onStart() {
// Set the ListAdapter to show the data.
Log.d("MyLog", " HERE "); // Shown by logs
ListView view = (ListView) findViewById(R.id.main_characters_view); // This is null
Log.d("MyLog", "The view is null:" + (view == null));
mainFragment.setCharsAdapter(this, this.charnames);
Log.d("MyLog", " HERE 2222"); //NOT shown by the logs
}
アクティビティのレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/characters_fragment_container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</LinearLayout>
フラグメント:
public class MainCharactersFragment extends Fragment {
public ListView charsList;
public Button newCharButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// The following is never shown in the logs
Log.d("MyLog", " HERE ");
View view = inflater.inflate(R.layout.main_characters_fragment, container, false);
return view;
}
public void setCharsAdapter(Context ctx, String[] data) {
// Raise NullPointerException because at this moment
// findViewById(R.id.main_characters_view) returns null
charsList.setAdapter(new ArrayAdapter<String>(ctx, R.id.main_characters_view, data));
}
@Override
public void onAttach(Activity activity) {
Log.d("MyLog", " onAttach called "); //Never shown
}
}
フラグメントレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView android:id="@+id/main_characters_view"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.5"
/>
<Button android:id="@+id/new_character_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/new_character"
/>
</LinearLayout>