第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用其上下文(android,java)從另一個(gè)類(lèi)調(diào)用函數(shù)

如何使用其上下文(android,java)從另一個(gè)類(lèi)調(diào)用函數(shù)

每當(dāng)用戶(hù)從 viewPager 按下項(xiàng)目?jī)?nèi)的按鈕時(shí),我都會(huì)嘗試重新加載 viewPager。這種情況下的相關(guān)類(lèi)是SetupActivity和Adapter。在活動(dòng)類(lèi)中,我已經(jīng)創(chuàng)建了兩個(gè)函數(shù)來(lái)重新加載 viewPager:public void deleteSession(String title) {        dbHelper = new DatabaseHelper(this);        ((DatabaseHelper) dbHelper).deleteRow(title);    }和public void refreshAdapter () {        dbHelper = new DatabaseHelper(this);         Cursor dataCursor = ((DatabaseHelper) dbHelper).getData();        models = new ArrayList<>();         while (dataCursor.moveToNext()) {             models.add(new Model(                    dataCursor.getString(1),                    dataCursor.getInt(2),                    dataCursor.getInt(3),                    dataCursor.getInt(4)            ));        }        adapter = new Adapter(models, this);        viewPager.setAdapter(adapter);        viewPager.setCurrentItem(0, true);    }所以基本上,deleteSession()從數(shù)據(jù)庫(kù)中刪除一個(gè)特定的項(xiàng)目。refreshAdapter()從數(shù)據(jù)庫(kù)中讀取更新的數(shù)據(jù)并為 viewPager 設(shè)置一個(gè)新的適配器。如果我從類(lèi)中的 OnClick 事件中調(diào)用它們,這些函數(shù)工作正常SetupActivity。但是,如果我嘗試從Adapter類(lèi)中的 OnClick 事件中調(diào)用它們,應(yīng)用程序會(huì)崩潰并出現(xiàn)以下錯(cuò)誤:java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDatabasePath(java.lang.String)' on a null object reference        at android.content.ContextWrapper.getDatabasePath(ContextWrapper.java:327)        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:352)        at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:322)        at com.example.android.slink.DatabaseHelper.getData(DatabaseHelper.java:69)        at com.example.android.slink.SetupActivity.refreshAdapter(SetupActivity.java:436)        at com.example.android.slink.Adapter$3.onClick(Adapter.java:111)        at android.view.View.performClick(View.java:6669)        at android.view.View.performClickInternal(View.java:6638)
查看完整描述

1 回答

?
小怪獸愛(ài)吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

像這樣改變你Adapter:


public class Adapter extends PagerAdapter {


    private List<Model> models;

    private LayoutInflater layoutInflater;

    private Context context;


    private SetupActivity setupActivity;


    public Adapter(List<Model> models, Context context) {

        this.models = models;

        this.context = context;

        setupActivity = (SetupActivity) context;

    }


    @NonNull

    @Override

    public Object instantiateItem(@NonNull final ViewGroup container, final int position) {

        layoutInflater = LayoutInflater.from(context);

        final View view = layoutInflater.inflate(R.layout.item, container, false);


        TextView buttonDeleteCard = view.findViewById(R.id.textViewDeleteCard);


        buttonDeleteCard.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                setupActivity.deleteSession([...some title...]);

                setupActivity.refreshAdapter();

            }

        });


        container.addView(view, 0);

        return view;

    }

}

為什么會(huì)出錯(cuò)?


您將Contextfrom傳遞SetupActivity給您的Adapter,將該引用保存在字段 ( context) 中,但您錯(cuò)誤地創(chuàng)建了SetupActivity.


這就是為什么你得到NullPointerException. 活動(dòng)是你的Context。它繼承自它。因此,只需將其轉(zhuǎn)換為您的構(gòu)造函數(shù)并稍后使用它。


查看完整回答
反對(duì) 回復(fù) 2022-07-06
  • 1 回答
  • 0 關(guān)注
  • 138 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)