Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java setOnClickListener不适用于膨胀布局_Java_Android_Onclicklistener_Layout Inflater - Fatal编程技术网

Java setOnClickListener不适用于膨胀布局

Java setOnClickListener不适用于膨胀布局,java,android,onclicklistener,layout-inflater,Java,Android,Onclicklistener,Layout Inflater,我在子布局中制作的按钮不起作用。 我希望我的按钮在我单击时工作。 我想分层充气机有问题,但我还是不明白 final View addedView =inflater.inflate(R.layout.sublayout,null); 如何修改我的代码 这是我的主要活动课 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

我在子布局中制作的按钮不起作用。 我希望我的按钮在我单击时工作。 我想分层充气机有问题,但我还是不明白

final View addedView =inflater.inflate(R.layout.sublayout,null);
如何修改我的代码

这是我的主要活动课

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    button3by3 = findViewById(R.id.button_3by3);
    container=findViewById(R.id.container);

    button3by3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View addedView =inflater.inflate(R.layout.sublayout,null);
            container.addView(addedView);
            
        }
    });
}
下面是我的主要活动xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:layout_editor_absoluteX="154dp"
    tools:layout_editor_absoluteY="138dp">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Toast"
        android:id="@+id/button_sub"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />
</LinearLayout>

您可以尝试在onCreateView中执行膨胀操作,或者您唯一的问题是

直接使用getSystemService而不使用getContext,因此首先创建上下文

然后在此上下文中使用getSystemService将是另一种选择

在活动中你可以尝试

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

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
                  inflater =(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View addedView = inflater.inflate(R.layout.sublayout,container,false);
        button3by3 = addedView.findViewById(R.id.button_3by3);

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

              
              //related code comes here

            }
        });

        return addedView;

    }
}

PS:您也可以在片段中尝试这些操作。

您从哪里开始“次级布局活动”?您打算做什么?因为片段更适合这个实现。因为我对android和java非常熟悉,所以我从来没有想过片段。谢谢,我应该去看看
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
                  inflater =(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View addedView = inflater.inflate(R.layout.sublayout,container,false);
        button3by3 = addedView.findViewById(R.id.button_3by3);

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

              
              //related code comes here

            }
        });

        return addedView;

    }
}