片段不会显示在活动
我想创建一个屏幕,将有一个3按钮的片段,并在它下面的文本框架,但我没有看到任何东西,当我运行应用程序。 我是Android新手,所以我假设我缺少一些基本的东西。 我错过了什么?片段不会显示在活动
编辑:谢谢你的所有答案。问题最终是因为按钮的大小不可见。 活动确实加载了片段,而无需调用片段管理器。
哦,学习一门新的框架:)
感谢您的乐趣!
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);
}
}上给出部分
删除评论。您必须使用fragmentTransaction将片段添加到fragmentManager中才能查看片段。
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();
试试这个,如果工作
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mFragment = new ButtonsFragment();
fragmentTransaction.add(R.id.buttons, mFragment);
fragmentTransaction.commit();
上面的代码替换这一点,并尝试可能工作。
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.buttons, fragment).commit();
如果你想直接在XML则显示片段,
<fragment
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="400dp"
class="com.thenoisemargins.eyaldagiavdor.thisdaybefore.ButtonsFragment" />
或者,如果你想以编程方式显示,您需要使用
getSupportFragmentManager()
因为您使用的是ActionbarActivity,如: add f ramelayou与id'框架'(示例)在布局,然后将此代码添加到您的活动
FrameLayout f = (FrameLayout) findViewById(R.id.fram);
getSupportFragmentManager().beginTransaction().replace(R.id.fram, new ButtonsFragment()).commit();
希望这有助于!
同时检查您是否正在扩展android.support.v4.app.Fragment片段类。 – Harry 2015-03-20 06:10:19
尝试过它,仍然无法正常工作。 – 2015-03-19 17:55:32