具有Activity和FragmentActivity的片段都不起作用

时间:2016-01-16 12:15:16

标签: android android-fragments android-fragmentactivity

我想在片段中显示我的活动中的条形图,但它显示出膨胀问题。所以,我将Activity更改为FragmentActivity,我的应用程序正在运行,但片段部分输出没有显示。

这是我的代码我无法找出我做了什么错误:

MainActivity:

public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

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" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    <fragment
            android:id="@+id/fghis"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            class="com.anu.actualdemobargraph.HistoryFrag" />
</LinearLayout>

HistoryFrag:

import java.util.ArrayList;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.echo.holographlibrary.Bar;
import com.echo.holographlibrary.BarGraph;
import com.echo.holographlibrary.BarGraph.OnBarClickedListener;

public class HistoryFrag extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.historyfrag, container,false);
        BarGraph g = (BarGraph)view.findViewById(R.id.bargraph);
        ArrayList<Bar> points = new ArrayList<Bar>();
        Bar d = new Bar();
        d.setColor(Color.parseColor("#c6c6c6"));
        d.setName("Test1");
        d.setValue(10);
        Bar d2 = new Bar();
        d2.setColor(Color.parseColor("#c6c6c6"));
        d2.setName("Test2");
        d2.setValue(20);
        Bar d4 = new Bar();
        d4.setColor(Color.parseColor("#c6c6c6"));
        d4.setName("Test2");
        d4.setValue(20);
        Bar d5 = new Bar();
        d5.setColor(Color.parseColor("#FFBB33"));
        d5.setName("Test2");
        d5.setValue(20);
        Bar d6 = new Bar();
        d6.setColor(Color.parseColor("#c6c6c6"));
        d6.setName("Test2");
        d6.setValue(20);
        Bar d7 = new Bar();
        d7.setColor(Color.parseColor("#c6c6c6"));
        d7.setName("Test2");
        d7.setValue(20);
        Bar d8 = new Bar();
        d8.setColor(Color.parseColor("#c6c6c6"));
        d8.setName("Test2");
        d8.setValue(20);
        Bar d3 = new Bar();
        d3.setColor(Color.parseColor("#c6c6c6"));
        d3.setName("Test3");
        d3.setValue(50);
//        d3.setStackedBar(true);
//        d3.AddStackValue(new BarStackSegment(2, Color.parseColor("#FFBB33")));
//        d3.AddStackValue(new BarStackSegment(4, Color.RED));
        points.add(d);
        points.add(d2);
        points.add(d3);
        points.add(d4);
        points.add(d5);
        points.add(d6);
        points.add(d7);
        points.add(d8);


        g.setUnit("meters");
        g.appendUnit(true);
        g.setBars(points);

        g.setOnBarClickedListener(new OnBarClickedListener(){

            @Override
            public void onClick(int index) {

            }

        });
        return view;
    }
    public HistoryFrag() {
        // TODO Auto-generated constructor stub
    }
}

historyfrag.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.echo.holographlibrary.BarGraph
        android:id="@+id/bargraph"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

</LinearLayout>

在historyfrag.xml中,BarGraph取自库,库中没有问题。

先谢谢。

1 个答案:

答案 0 :(得分:0)

您需要使用FragmentManager将Fragment附加到Activity。根据您是否要使用框架片段或支持片段,此过程略有不同。

框架片段

这是Fragment类,内置于Android Framework中,可在API 11及更高版本中使用。

要使用属于Android框架的Fragment类,您需要更改HistoryFrag类中的import语句:

import android.support.v4.app.Fragment;

import android.app.Fragment;

然后在您的活动onCreate方法中,您需要添加:

getFragmentManager()
    .beginTransaction()
    .replace(R.id.fghis, new HistoryFrag())
    .commit();

支持图书馆碎片

如果要支持API级别&lt; 11,则需要使用支持库中的Fragment类。这将片段功能向后移植到API 4。

如果您想使用支持库中的Fragment类,则需要确保扩展FragmentActivity并将historyFrag类中的import语句保留为android.support.v4.app.Fragment

然后在您的活动onCreate()方法中添加以下内容:

getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.fghis, new HistoryFrag())
    .commit();

然后将片段附加到活动。