什么是片段?如何将frgament添加到现有活动?以及如何修改片段的布局

时间:2015-11-04 10:13:48

标签: android android-fragments

我是android的新手,我想创建一个包含listview的片段,我想将该片段添加到我的主要活动中。我正在尝试但我无法将其添加到我的活动中,也无法定义我自己的布局到它。所以请帮助我。 提前谢谢。

这是我的MainActivity.java

package com.example.sample;

import android.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {


String[] codeLearnChapters = new String[] { "Android Introduction","Android Setup/Installation","Android Hello World","Android Layouts/Viewgroups","Android Activity & Lifecycle","Intents in Android"};

ArrayAdapter<String> codeLearnArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, codeLearnChapters);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ListView codeLearnLessons = (ListView) findViewById(R.id.idListView1);
    setContentView(R.layout.activity_main);
    codeLearnLessons.setAdapter(codeLearnArrayAdapter);
}

@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);
}
}

它的xml是

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


<fragment
    android:layout_width="wrap_content"
    android:layout_height="300dp"
    android:name="com.example.sample.myFragment"
    android:id="@+id/fragment"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true" />
</RelativeLayout>

我的片段java是myFragment.java

package com.example.sample;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater; 
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * Created  on 11/4/2015.
*/
public class myFragment extends Fragment {


@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle
                                 savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.act_fragment,
            container, false);
    return view;
}
}

它的xml即act_fragment.xml是

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<ListView
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/idListView1">
</ListView>

</RelativeLayout>

3 个答案:

答案 0 :(得分:1)

Fragment表示Activity中的行为或用户界面的一部分。您可以在单个活动中组合多个片段以构建多窗格UI,并在多个活动中重用片段。您可以将片段视为活动的模块化部分,它具有自己的生命周期,接收自己的输入事件,并且您可以在活动运行时添加或删除(有点像&#34;子活动&# 34;您可以在不同的活动中重复使用。)

用我的话说,片段是一个子活动。

您可以详细了解片段的内容http://developer.android.com/guide/components/fragments.html

还有一个您可以使用的样本(并且会有所帮助,因为您将学到新的东西)。样本为http://developer.android.com/training/basics/fragments/index.html

你也可以在youtube上查找它(一旦你读过它并了解它是什么片段)。还有一个视频教程可以帮助您。只需搜索&#34; Android Fragment Lifecycle第1部分:Android应用程序开发教程[HD 1080p]&#34; - 抱歉,Stackoverflow不允许我添加两个以上的链接。

他们有五个教程,我会推荐它,因为它可以帮助你自己更好地开始。

答案 1 :(得分:0)

您可以阅读有关片段内容的更多信息 link 代码:

public class Tab2Fragment extends Fragment {


    EditText fromdate;
    EditText todate;

    // List view 
    private ListView lv;

    // Listview Adapter 
    ArrayAdapter<String> adapter;

    // Search EditText 
    EditText inputSearch;


    // ArrayList for Listview 
    ArrayList<HashMap<String, String>> productList;

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View V = inflater.inflate(R.layout.tab2_view, container, false);


        EditText fromdate=(EditText)V.findViewById(R.id.fromdate);
        EditText todate=(EditText)V.findViewById(R.id.todate);

        fromdate.setOnClickListener(new View.OnClickListener() {
            @Override 
            public void onClick(View v) {


            } 
        }); 

        // Listview Data 
        String products[] = {"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE",
                "iPhone 4S", "Samsung Galaxy Note 800", 
                "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"}; 

        lv = (ListView) V.findViewById(R.id.list_view);


        // Adding items to listview 
        adapter = new ArrayAdapter<String>(getActivity(), R.layout.list_item, R.id.product_name, products);
        lv.setAdapter(adapter);


        return V;
    } 


} 

答案 2 :(得分:0)

希望此链接对您有所帮助 http://developer.android.com/guide/components/fragments.html

将它放在您的活动类中 FragmentManager fragmentManager = getFragmentManager();

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

ExampleFragment fragment = new ExampleFragment();

fragmentTransaction.add(R.id.fragment_container,fragment);

fragmentTransaction.commit();

并将代码放在activitylayout代码中

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/fragment_container"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:ignore="MergeRootFrame" />