如何在主要活动中访问片段的按钮?

时间:2019-03-21 19:28:07

标签: android android-fragments

我有一个片段,里面有一个按钮。单击该按钮后,它应该动态地向布局添加新的编辑文本。我该怎么办?

主要活动:

6.21137766,  0.01412189,  0.38315024, -0.60655271

片段:

package comx.example.amithy.hw4;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity implements BlankFragment.addnew{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container,new BlankFragment(),"add")
                .commit();
    }

    @Override
    public void add() {
        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText editText = new EditText(MainActivity.this);
                editText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

            }
        });
    }
}

主要activity.xml文件:

    package comx.example.amithy.hw4;


    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.constraint.ConstraintLayout;
    import android.support.v4.app.Fragment;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.EditText;


    public class BlankFragment extends Fragment {
    private addnew mListner;

        public BlankFragment() {
        }


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

        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            getActivity().findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListner.add();
                }
            });
        }


    public interface addnew{
            void add();
    }
    }

片段的xml文件:

   <?xml version="1.0" encoding="utf-8"?>
   <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" />

可以从主要活动中访问片段中的按钮吗?并单击添加片段按钮中的现有编辑文本下方添加编辑文本?

1 个答案:

答案 0 :(得分:0)

您可能需要对Fragment的布局进行某种程度的重构,以使EditText显示在Button下方,但是您应该能够通过获取一个引用容器视图(在本例中为ConstraintLayout),然后将其添加。因此,假设ConstraintLayout具有android:id=@+id='myConstraintLayout',您应该可以从MainActivity执行此操作:

findViewById(R.id.myConstraintLayout).addView(editText);

要使其显示在Button下,您需要重构以在布局中的某处使用垂直LinearLayout(并将上面的ID替换为该容器的ID),或以编程方式将所有布局参数添加到EditText中,以使其显示在所需位置。