[英]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("•"));
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.