Reputation: 911
I am trying to create a screen that will have a fragment with 3 buttons and underneath it a text frame but am not seeing anything when I ran the app. I am new to Android so I assume I am missing something basic. What am I missing?
Edit: Thank you for all the answers. The problem ended up being that the buttons were of invisible size. The activity did load the fragment, without the need to call the fragment manager.
Oh, the joys of learning a new framework :)
Thank you!
activity_main.xml
<LinearLayout 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:orientation="vertical">
<fragment
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="400dp"
class="com.thenoisemargins.eyaldagiavdor.thisdaybefore.ButtonsFragment" />
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:layout_width="48dp"
android:layout_height="45dp"
android:id="@+id/historicalQuoteTextView"
android:layout_gravity="center_vertical"
android:textAlignment="center"
android:textColor="#FFFFFFFF"
android:text="Quote"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</FrameLayout>
buttons_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<at.markushi.ui.CircleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:text="@string/this_day_before"
android:id="@+id/thisDayBeforeButton"
app:cb_color="#99CC00"
app:cb_pressedRingWidth="8dip" />
<at.markushi.ui.CircleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:text="@string/choose_date"
android:id="@+id/ChooseDateButton"
app:cb_color="#99CC00"
app:cb_pressedRingWidth="8dip" />
<at.markushi.ui.CircleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:text="@string/random_date"
android:id="@+id/RandomDateButton"
app:cb_color="#99CC00"
app:cb_pressedRingWidth="8dip" />
</LinearLayout>
MainActivity.java
public class MainActivity extends ActionBarActivity {
private ButtonsFragment mFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mFragment = new ButtonsFragment();
fragmentTransaction.add(R.id.buttons, mFragment);
fragmentTransaction.commit();
*/
mFragment = (ButtonsFragment) getFragmentManager()
.findFragmentById(R.id.buttons);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.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);
}
}
ButtonsFragment.java
public class ButtonsFragment extends Fragment {
private at.markushi.ui.CircleButton mThisDayBeforeButton;
private at.markushi.ui.CircleButton mChooseDateButton;
private at.markushi.ui.CircleButton mRandomDateButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.buttons_fragment, container, false);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mThisDayBeforeButton = (at.markushi.ui.CircleButton) getActivity().findViewById(R.id.thisDayBeforeButton);
mChooseDateButton = (at.markushi.ui.CircleButton) getActivity().findViewById(R.id.ChooseDateButton);
mRandomDateButton = (at.markushi.ui.CircleButton) getActivity().findViewById(R.id.RandomDateButton);
}
}
Upvotes: 1
Views: 1521
Reputation: 2423
If you want to show fragment directly in xml then,
<fragment
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="400dp"
class="com.thenoisemargins.eyaldagiavdor.thisdaybefore.ButtonsFragment" />
Or if you want to display programmatically, you need to use
getSupportFragmentManager()
because you are using ActionbarActivity, like: add framelayou with id 'frame' (example) in layout and then add this code to your activity
FrameLayout f = (FrameLayout) findViewById(R.id.fram);
getSupportFragmentManager().beginTransaction().replace(R.id.fram, new ButtonsFragment()).commit();
Hope this helped!
Upvotes: 0
Reputation: 3563
Try this if work
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mFragment = new ButtonsFragment();
fragmentTransaction.add(R.id.buttons, mFragment);
fragmentTransaction.commit();
Above code replace with this and try may be work.
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.buttons, fragment).commit();
Upvotes: 0
Reputation: 514
remove comment on given section. You will have to add the fragment in the fragmentManager using fragmentTransaction in order to view fragment.
mFragment = (ButtonsFragment) getFragmentManager()
.findFragmentById(R.id.buttons);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mFragment = new ButtonsFragment();
fragmentTransaction.add(R.id.buttons, mFragment);
fragmentTransaction.commit();
Upvotes: 2