我有这样的主要布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_showdetails"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:layout_marginLeft="110dip"
android:layout_marginTop="15dip"
android:text="Show Details" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:id="@+id/my_parent_layout"
>
</LinearLayout>
</LinearLayout>
我正在尝试使用此类调用my_parent_layout中的另一个活动 包com.appnetics;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.Button;
public class FragmenttestActivity extends FragmentActivity {
Button LogIn = null ;
final FragmentManager fragmentManager = getSupportFragmentManager() ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LogIn = (Button) findViewById(R.id.btn_showdetails);
LogInEvent() ;
}
public void LogInEvent(){
LogIn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
details fragment = new details();
fragmentTransaction.add(R.id.my_parent_layout, fragment);
fragmentTransaction.commit();
}
});
}
}
细节布局是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/date_time_label"
android:layout_centerVertical="true"
android:layout_marginLeft="200dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="32dp"
android:textStyle="bold"
android:text="time_label"
/>
<TextView
android:id="@+id/last_view_time"
android:layout_toRightOf="@+id/date_time_label"
android:layout_alignBaseline="@+id/date_time_label"
android:layout_marginLeft="8dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="32dp"
/>
</LinearLayout>
,布局代码是 / * $ Id:$ * /
package com.appnetics;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* DateTime
*/
public class details extends Fragment {
private static String getDateTimeString(Date time) {
return new SimpleDateFormat("d MMM yyyy HH:mm:ss")
.format(time);
}
private final String time = getDateTimeString(new Date());
/** @see android.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) */
@Override
public View onCreateView(
LayoutInflater inflater,
ViewGroup container,
Bundle b)
{
View view = inflater.inflate(
R.layout.details,
container,
false); //!!! this is important
((TextView) view.findViewById(R.id.last_view_time))
.setText(time);
return view;
}
}
问题是当点击按钮时,没有任何内容出现,我的代码中有什么问题
答案 0 :(得分:6)
让我们开始吧!
关于您的详细信息XML:
android:layout_toRightOf="@+id/date_time_label"
android:layout_alignBaseline="@+id/date_time_label"
这两个标签用于相对布局,布局的父级必须是相对类型才能工作。
android:layout_centerVertical="true"
此标记也不正确,如果要将文本居中于textview中,可以使用两种方法或在textView中包装内容并在其父级中设置中心或使用:
android:gravity="right"
android:width="fill_parent"
这将是detail_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/date_time_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="32dp"
android:textStyle="bold"
android:text="time_label"
/>
<TextView
android:id="@+id/last_view_time"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:text="view time"
android:textSize="32dp" />
</LinearLayout>
在main.xml上,您多次声明架构!应该在你的根布局上声明一次。
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
所以main.xml将是......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/add_fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<LinearLayout
android:id="@+id/fragment_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
片段是在其类中声明的元素并应用其xml。
public class DetailsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, container, false);
}
}
在主要活动中将其添加到持有人布局:
public class FragmentSimpleTestActivity extends FragmentActivity {
private Button addFragment;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final FragmentManager fragmentManager = getSupportFragmentManager();
addFragment = (Button) findViewById(R.id.add_fragment);
addFragment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
DetailsFragment fragment = new DetailsFragment();
fragmentTransaction.add(R.id.fragment_holder,fragment, "MY_FRAG");
fragmentTransaction.commit();
}
});
}
}
fragmentTransaction.add具有参数
非常重要1:保存片段的视图的id。 2:片段对象。 3:用于查找堆栈中的片段的标记。
那就是全部:)
享受你的碎片!您还可以在添加或删除动画时设置动画。
答案 1 :(得分:0)
onCreateView()
当片段第一次绘制其用户界面时,系统会调用此方法。要为您的片段绘制UI,您 必须从此方法返回一个View,它是您的根 片段的布局。如果片段没有,则可以返回null 提供用户界面。
在片段类中调用OnCreateView
return inflater.inflate(R.layout.fragmentlayout, container, false);
答案 2 :(得分:0)
当片段没有显示时,我遇到了类似的问题。问题是我删除了AndroidAnnotations,但忘记将代码从onViewCreated和onCreate方法移动到onCreateView。我通过比较两个片段的代码找到了这个错误 - 一个是显示的,另一个是不显示的。因此,如果您遇到类似问题,请尝试检查片段代码。乍一看它可能不会显示任何错误,但由于这些错误,它们仍然无法正常工作或显示。
特别是,检查您是否拥有此方法,并且您要对视图进行充气:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.your_fragment_layout, container, false);
return v;
}