片段和视图

时间:2012-11-09 12:22:40

标签: java android

我的应用程序分为多个片段,每个片段都有自己的布局(.xml文件)。

当我开始在我的活动的onCreate()方法中可视化第一个片段时,我使用setContentView(fragment_first)设置了适当的布局。例如,如何更改第二个片段(fragment_second)中包含的TextView

3 个答案:

答案 0 :(得分:0)

一般来说,Fragment或任何ActivityView应该更新自己的内部UI控件。它更容易,而且设计也很好。其他类/事件可能会更新Fragment数据的状态,但它会处理该状态的显示方式。

编辑以回答评论问题:

这是在片段中加载内容视图的方法:

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

答案 1 :(得分:0)

您似乎在活动中设置了第一个片段的xml文件。 你应该做的就是创建一个全新的类并使其扩展android.support.v4.app.Fragment,同时让你的活动扩展FragmentActivity而不仅仅是Activity。

然后在你的android.support.v4.app.Fragment类中(我将从现在开始调用你的片段)你应该覆盖onCreateView(LayoutInflater inflate, ViewGroup container, Bundle savedInstanceState){}方法,在这个方法中你应该放一行这样的: View view = inflater.inflate(R.layout.the_xml_layout_for_this_fragment, container, false);会扩展片段的布局并将其植入活动布局中的适当位置。

在此之后您需要return view;,但在返回此视图之前,您可以执行view.findViewById(R.id.id_of_a_view_from_the_xml_layout_file);以查找元素并对其进行操作。

您应该为应用中需要的每个片段创建一个这样的片段类,并让它为自己的xml布局文件充气。

有关详细说明,您可以查看http://www.youtube.com/watch?v=4BKlST82Dtg或其他视频或书面教程。

编辑:这是一个基本的片段类:

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;

public class MyFrag extends Fragment {

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

    // inflate the view:
    View view = inflater.inflate(R.layout.myfrag_layout, container, false);

    // manipulate widgets, for example:
    TextView textView = (TextView) view.findViewById(R.id.textView);
    textView.setText("read me!!!");

    // return the view:
    return view;
    }

}

它是育儿活动:

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;

public class MyFragmentActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // notice that there is a different layout file for the activity and for
    // the fragment!
    setContentView(R.layout.xml_layout_for_the_activity);

    // to start the fragment and stick it into your activity (not needed if
    // you use ViewPager)
    FragmentManager fragMan = getSupportFragmentManager();
    fragMan.beginTransaction()
        .add(R.id.the_visual_element_that_will_contain_your_fragments_layout, fragMan)
        .commit();
    }

}

答案 2 :(得分:0)

在您的onCreateView()方法中,您应该将以后需要访问的所有视图分配给片段类中的字段,例如

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    view = inflater.inflate(R.layout.xxx, container, false);

    this.aTextView = (TextView)view.findViewById(R.id.a_text_view);
    this.anImageView = (ImageView)view.findViewById(R.id.an_image_view);
    ...
}
然后,您可以在片段执行的其他地方使用aTextView等。