如何将内容从活动转移到片段

时间:2018-08-20 17:31:18

标签: java android

我的应用程序只有一个活动,因此我决定将主要内容放在一个片段中,因此我可以继续将抽屉与其他活动一起使用。但是我不能使按钮起作用:

 Button profile= findViewById(R.id.button1);
    profile.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplication(),"Sürücüler",Toast.LENGTH_SHORT).show();
        }
    });

    Button education= findViewById(R.id.button2);
    education.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplication(),"Takımlar ve arabalar",Toast.LENGTH_SHORT).show();
        }
    });

    Button health= findViewById(R.id.button3);
    health.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplication(),"Pistler",Toast.LENGTH_SHORT).show();
        }
    });

    Button goals= findViewById(R.id.button4);
    goals.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplication(),"Sıralama",Toast.LENGTH_SHORT).show();
        }
    });

    Button finance= findViewById(R.id.button5);
    finance.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplication(),"Grand Prix Tarihi",Toast.LENGTH_SHORT).show();
        }
    });

    Button comfort= findViewById(R.id.button6);
    comfort.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplication(),"GP kart oyunu",Toast.LENGTH_SHORT).show();
        }
    });

如果我将此代码留在MainActivity上,则无法使用(因为尚未创建按钮?),但是当我将它们移入片段时,findViewById和getApplicationContext无法使用。如何使Toast消息与片段兼容,如何确保片段可以使用findviewbyid?

我是初学者,因此很简单,对此我感到抱歉。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

根据您的评论,

If (Len(Trim(ws.Range("H3").Value)) = 0 Or Len(Trim(ws.Range("H4").Value)) = 0) Or _
   (Len(Trim(ws.Range("H3").Value)) <> 0 And ws.Range("H3").Value < Date) Or _
   (Len(Trim(ws.Range("H4").Value)) <> 0 And ws.Range("H4").Value < Date) Then
    '~~> Show userform
    employeeselection.Show
ElseIf (Len(Trim(ws.Range("H3").Value)) <> 0 And ws.Range("H3").Value = Date) Or _
    (Len(Trim(ws.Range("H4").Value)) <> 0 And ws.Range("H4").Value = Date) Then
    '~~> Hide shapes here
End If

实际上应该是:

return inflater.inflate(R.layout.fragment_home, container, false);

答案 1 :(得分:0)

如果片段XML中的按钮 您可以使用

 Button profile= v.findViewById(R.id.button1);

所以v是您在“ onCreateView”方法中的片段视图

View v=inflater.inflate(R.layout.fragment_home, container, false);

以及方法的最后一个

return v;

答案 2 :(得分:0)

片段通常用作活动用户界面的一部分,并为活动贡献自己的布局。  因此,首先您需要为片段创建一个带有所有按钮的布局。

要提供我们为片段创建的布局,您必须在片段类中实现onCreateView()回调方法,当片段需要绘制布局时,Android系统会调用该方法。您对该方法的实现必须返回一个View,它是片段布局的根。

public  class ExampleFragment extends Fragment {

 Button health;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View root = inflater.inflate(R.layout.example_fragment, container, false);
    // bind views like this:-
    health= root.findViewById(R.id.button3);

    return  root;  
  }
}

要管理活动中的片段,您需要使用FragmentManager。要获取它,请从您的活动中调用getSupportFragmentManager()。 现在,活动类添加以下代码以将片段添加到活动中,:-

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

 // Commit the transaction
 transaction.commit();

R.id.fragment_container是容器布局的ID,要在活动布局中添加片段的容器布局,通常是框架布局。

How to use Fragments in android