java按钮onclick from fragment to mainactivity

ni65a41a  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(341)

我身体里有3块碎片 MainActivity 在我的一个片段中,我有3个 ImageView 并且每个图像视图执行相同的操作 ImageView 被选中,现在我想实现的是 OnClickListener 对于每个视图,分别使用switch case或if else inside调用相同的方法。但问题是 ImageViews 内部片段不能调用mainactivity内部实现的函数。例如。下面是我想说的代码:
主要活动

public void imageClicked(View v){
    if(v.getID() == findViewById(R.id.id_of_imageView_1).getID()){
        myTextView.setText("ImageView 1 is Clicked")
    }

    else if(v.getID() == findViewById(R.id.id_of_imageView_2).getID()){
        myTextView.setText("ImageView 2 is Clicked")
    }

    else if(v.getID() == findViewById(R.id.id_of_imageView_3).getID()){
        myTextView.setText("ImageView 3 is Clicked")
    }
}

xml(fragment_images.xml),其中存在图像

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/id_of_imageView_1"
                android:layout_width="0dp"
                android:layout_height="100dp"
                android:layout_weight="1"
                android:src="@drawable/laptop" />

            <ImageView
                android:id="@+id/id_of_imageView_2"
                android:layout_width="0dp"
                android:layout_height="100dp"
                android:layout_weight="1"
                android:src="@drawable/memory" />

            <ImageView
                android:id="@+id/id_of_imageView_3"
                android:layout_width="0dp"
                android:layout_height="100dp"
                android:layout_weight="1"
                android:src="@drawable/screen" />

        </LinearLayout>
    </ScrollView>

xml(activity\u main.xml)这里我链接了我的片段和文本视图

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

     //CHANGE THIS TEXT VIEW WHEN IMAGE IS CLICKED
     <TextView
        android:id="@+id/myTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:gravity="center_horizontal"
        android:text="Select Product"
        android:textSize="20sp"
        android:textStyle="bold" />

        <fragment
            android:id="@+id/fragment_1"
            android:name="com.salmanibrahim.calssifiedelectronics.ListFrag"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            tools:layout="@layout/fragment_list" />

        <fragment
            android:id="@+id/fragment_2"
            android:name="com.salmanibrahim.calssifiedelectronics.DetailFrag"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            tools:layout="@layout/fragment_detail" />

        //THIS IS THE FRAGMENT
        <fragment
            android:id="@+id/fragment_images"
            android:name="com.salmanibrahim.calssifiedelectronics.AddProduct"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            tools:layout="@layout/fragment_images" />
    </LinearLayout>

我怎么打电话 imageClicked() 内部定义 MainActivity 使用 onClickImageView

xeufq47z

xeufq47z1#

我明白你想做什么但是 android:onClick 中声明的上下文的仅参数链接 tools:context 布局文件的父标记上的字段。
所以不可能参考你的 imageClicked() 从片段的mainactivity中找到的函数 ImageView 因为他们在不同的背景下。查看此以获取更多信息。

ebdffaop

ebdffaop2#

在你的片段中你可以调用 imageClicked()MainActivity 通过使用 requireActivity() 或者 getActivity() 做必要的演员
碎片:

public View onCreateView(...) {

    View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
    MainActivity mActivity = (MainActivity) requireActivity();

    imageView1 = view.findViewById(...);
    imageView1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mActivity.imageClicked(imageView1);
        }
    });

...}

对imageview2、3重复相同的步骤
还有 imageClicked() 好像不像你那样对 findViewById 它将指向主活动布局,而不是片段。
所以你需要改变这个

if (v.getID() == findViewById(R.id.id_of_imageView_1).getID())

if (v.getID() == R.id.id_of_imageView_1)

对其他图像也一样。

nafvub8i

nafvub8i3#

你做得不对。你可以这样做。

imageView_1.setOnClickListener(this);

然后从中实施活动 View.onClickListener 然后在已实现的方法上按id获取视图。

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.id_of_imageView_1:
            // do your things here
            break;
        }
}

相关问题