-3

この機能を使用できるように、ParseQUeryAdapter を拡張するクラスがありnotifyDataSetChangedます。アダプタ クラスは と呼ばれmainAdapterます。mainAdapter の notifyDataSetCHanged メソッドは次のとおりです。

@Override
public void notifyDataSetChanged() {
    super.notifyDataSetChanged();
    MainActivity mainActivity = new MainActivity();
    mainActivity.getItems();
}

MainActivity の getItems() メソッドは次のとおりです。

public void getItems(){
    if(adapter == null){
        Toast.makeText(MainActivity.this, "null", Toast.LENGTH_SHORT).show();
    }
}

ロード中にアプリがクラッシュします。ご覧のとおり、 nullifかどうかを確認できるように を植えました。adapterしかし、それでもクラッシュします。デバッガーによるとif、「adapter:null」の行に到達した後、緑色で表示されます。しかし、私は onCreate() にこれを持っています:

adapter = new mainAdapter(this);

そして私はそれを宣言しました:

mainAdapter adapter

私の問題を解決する方法はありますか?クラスを実装しているのに、なぜまだ null なのですか? とはっきり申し上げましたadapter = new mainAdapter()

4

2 に答える 2

2

new;でアクティビティ クラスをインスタンス化しないでください。startActivity()これらは、関連する APIを使用して対話する必要があります。

で作成されnewたアクティビティは、ActivityManager に登録されず、画面に表示されず、 と呼ばれるライフサイクル コールバックもありません

MainActivityインスタンスのonCreate()メソッドが実行されていないため、はadapter作成されていません。

あなたの場合、 ParseQueryAdaptor サブクラスに何らかの方法でアクティビティへの参照を持たせて、正しいアクティビティにアクセスできるようにしたいようです。

于 2016-03-01T17:49:03.230 に答える
0

既存のアクティビティを参照したい場合は、アクティビティ オブジェクトを使用したい場所に渡す必要があります (または、それが利用可能なクラスにある場合は getContext または getActivity を使用します)。

できることの 1 つは、MainActivity オブジェクトを ParseQUERYAdapter に渡すメソッドを作成することです。次に、アダプターで何かを呼び出すときはactivityObject.whatevermethodyouwantocallontheactiviy()、まずアクティビティ オブジェクトをエラー チェックしてください。

いいえ:

private MainActivity activity;
public void setup(MainActivity activity){ this.activity = activity;}

@Override
public void notifyDataSetChanged() {
    super.notifyDataSetChanged();
    if(activity != null){
        activity.getItems();
    }
}
于 2016-03-01T18:15:07.420 に答える