簡體   English   中英

從同一個類中的另一個方法調用 void 方法

[英]Call void method from another method in the same class

起初我的主要問題是如何從同一個類調用一個方法,即使很難,我想我找到了一種方法來做到這一點,它沒有按我預期的那樣工作,我想知道什么是我的最佳方法案件。

這是我正在處理的代碼:

public class EscolhaAtendimento extends AppCompatActivity {

    private ViewPager mSlideViewPager;
    private LinearLayout mDotLayout;

    String TAG = "TasksSample";

    private TextView[] mDots;

    private SliderAdapter sliderAdapter;
    Dialog myDialog;

    @Override
    public void onCreate (Bundle SavedInstanceState){
        super.onCreate(SavedInstanceState);
        setContentView(R.layout.escolha_atendimento);

        mSlideViewPager = findViewById(R.id.slideViewPager);
        mDotLayout = findViewById(R.id.dotsLayout);



        sliderAdapter = new SliderAdapter(this);
        mSlideViewPager.setAdapter(sliderAdapter);
        addDotsIndicator(0);
        mSlideViewPager.addOnPageChangeListener(viewListener);
        myDialog = new Dialog(this);
    }

    public void addDotsIndicator(int position){

        mDots = new TextView[8];
        mDotLayout.removeAllViews();

        for (int  i= 0; i < mDots.length; i++){
            mDots[i] = new TextView(this);
            mDots[i].setText(Html.fromHtml("&#8226;"));
            mDots[i].setTextSize(35);
            mDots[i].setTextColor(getResources().getColor(R.color.colorTransparentWhite));

            mDotLayout.addView(mDots[i]);
        }

        if (mDots.length > 0){
            mDots[position].setTextColor(getResources().getColor(R.color.colorWhite));
        }

    }

    ViewPager.OnPageChangeListener viewListener = new ViewPager.OnPageChangeListener(){

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected (int i) {

            switch (i) {

                case 0: {

                    myDialog.show();

                }

                addDotsIndicator(i);
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    };

   public void ShowPopup(View v) {
            TextView txtclose;
            //Button btnFollow;
            myDialog.setContentView(R.layout.pop_upfinal);
            txtclose = myDialog.findViewById(R.id.txtclose);
            txtclose.setText("X");
            //btnFollow = (Button) myDialog.findViewById(R.id.btnfollow);
            txtclose.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    myDialog.dismiss();
                }
            });
            myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            myDialog.show();
    }
}

這個類是一個活動,在用戶滑動時,按鈕的文本和圖像會改變,即使它們的 ID 將保持不變。 (這是由另一個類控制的,它運行良好)。

現在,我希望活動上的圖像按鈕根據選擇的頁面執行不同的操作,這就是為什么在頁面更改偵聽器內的 onPageSelected 方法上有一個初始開關的原因。 布局中的圖像按鈕有android:onClick="ShowPopup"標簽,我想這對我來說也很復雜,如果我想讓它在同一個活動中做一些不同的事情? 此外,在切換時以這種方式調用它,每次我更改頁面並返回到第一個時,彈出窗口將打開,因為我的調用在那里是明確的。 (正如我所說,即使很艱難,我還是找到了一種以某種方式調用我的方法的方法,或者至少是結果,它沒有按我預期的那樣工作)。

編輯

然后我嘗試像這樣更改它,這樣按鈕就不會依賴於android:onClick="ShowPopup"標簽,也不需要直接在開關上調用 void 方法:

添加

public ImageButton popupchoice;

還有這個 onCreate 方法:

popupchoice = this.findViewById(R.id.imgslide1);

在開關內部,我這樣調用它以獲取按鈕 ID:

popupchoice.setOnClickListener(image1);

並像這樣設置 View.OnClickListener:

View.OnClickListener image1 = new View.OnClickListener() {
        public void onClick(View v) {
            TextView txtclose;
            //Button btnFollow;
            myDialog.setContentView(R.layout.pop_upfinal);
            txtclose = myDialog.findViewById(R.id.txtclose);
            txtclose.setText("X");
            //btnFollow = (Button) myDialog.findViewById(R.id.btnfollow);
            txtclose.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    myDialog.dismiss();
                }
            });
            myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            myDialog.show();
        }
    };

但這使我返回:

java.lang.NullPointerException:嘗試在 .EscolhaAtendimento$1.onPageSelected(EscolhaAtendimento.java:81) 處的空對象引用上調用虛擬方法“void android.view.View.setOnClickListener(android.view.View$OnClickListener)”

第 81 行是帶有 popupchoice.setOnClickListener(image1) 的開關內部的那一行。

此錯誤發生在頁面更改時,返回第一頁時,並且按鈕單擊將不再起作用。

我想你可以用

EscolhaAtendimento.this.ShowPopup從您的交換機內部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM