Открытие деятельности, нажав на кнопку, расположенную в PopUpWindow (Android Studio) - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь сделать то, что написано в заголовке, но по какой-то причине происходит сбой приложения, когда я нажимаю на кнопку.

Отображаемая ошибка:

java .lang.IllegalStateException: Не удалось найти метод show (View) в родительском или родительском контексте для android: атрибут onClick, определенный для класса представления android .widget.Button с идентификатором 'btn_1'

У меня есть MainActivity, которая содержит метод для открытия всплывающего окна с помощью кнопки (который, кажется, работает нормально, но я пишу его на всякий случай) и имеет вид:

publi c class MainActivity extends AppCompatActivity {

private PopupWindow popUpWindow;
private LayoutInflater layoutInflater;
private RelativeLayout relativeLayout;

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

    relativeLayout = (RelativeLayout) findViewById(R.id.relative);

}

public void newWindowPopup(View view){
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);

    int wide = dm.widthPixels;
    int height = dm.heightPixels;

    layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
    ViewGroup container = (ViewGroup) layoutInflater.inflate(R.layout.activity_popwindow, null);
    popUpWindow = new PopupWindow(container, (int)(wide*.7), (int)(height*.25), true);
    popUpWindow.setAnimationStyle(R.style.PopupAnimation);
    popUpWindow.showAtLocation(relativeLayout, Gravity.CENTER, 0, 0);

    container.setOnTouchListener(new View.OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            popUpWindow.dismiss();
            return true;
        }
    });

}

Макет для этого действия:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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/relative"
    android:background="#A85757"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <GridLayout
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:columnCount="1">

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

                <Button
                    android:id="@+id/btnFrases"
                    android:layout_width="10dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:onClick="newWindowPopup"
                    android:text="Button 1"
                    android:textColor="#000000" />

            </LinearLayout>

        </GridLayout>

    </ScrollView>

</RelativeLayout>

Код для открытия действия с помощью другой кнопки из созданного мною класса всплывающего окна, в котором, похоже, проблема :

publi c класс popwindow расширяет AppCompatActivity {

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

    Button p_button=findViewById(R.id.btn_1);

    p_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent showActivity = new Intent(getApplicationContext(), Main2Activity.class);
            startActivity(showActivity);
        }
    });
}


public void show(View view) {
    Intent showActivity = new Intent(getApplicationContext(), Main2Activity.class);
    startActivity(showActivity);
}

} ​​

Макет для этого действия:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary">


    <LinearLayout
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_1"
            android:layout_width="10dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="EEEEE"
            android:textColor="#000000" />


    </LinearLayout>

</RelativeLayout>

Наконец, действие Я пытаюсь открыть из этого всплывающего окна ( У Main2Activity) пока нет кода, это просто пустое действие с TextView.

Методы View связаны с кнопками со свойством onClick, так что это не проблема. Большое спасибо, если вы можете помочь.

1 Ответ

0 голосов
/ 30 апреля 2020

Сначала добавьте кнопку в popwindow layout.

 <Button  
        android:id="@+id/button"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="Start Second Activity"/>  

Затем добавьте следующую функцию, чтобы показать всплывающее окно и перейти ко второму действию

    public void newWindowPopup(View view){
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);

        int wide = dm.widthPixels;
        int height = dm.heightPixels;

        layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
        ViewGroup container = (ViewGroup) layoutInflater.inflate(R.layout.popwindow, null);
        popUpWindow = new PopupWindow(container, (int)(wide*.7), (int)(height*.25), true);
        popUpWindow.setAnimationStyle(R.style.PopupAnimation);
        popUpWindow.showAtLocation(relativeLayout, Gravity.CENTER, 0, 0);

        container.setOnTouchListener(new View.OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                popUpWindow.dismiss();
                return true;
            }
        });

        Button p_button=container.findViewById(R.id.button);  

        p_button.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) { 

            Intent showActivity = new Intent(getApplicationContext(), Main2Activity.class);
            startActivity(showActivity); 
            }  
        });  
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...