2016-06-29 24 views
-2

私のコードは以下のように定義されています。重要な活動は2つあります。アクティビティ(1)は、ViewFlipper内のいくつかのイメージを示しています。メソッドを使用して、目的のイメージを直接ロードします。 onOptionsItemSelected()メソッドは、リンクされたXMLレイアウトR.layout.browse内で定義されたメニューからデータをフェッチします。もう1つのメソッド​​は、別のアクティビティから渡されたタグパラメータを取得します。それをactivity(2)としましょう。ここでNullPointerExceptionが発生するのはなぜですか?

アクティビティ(1):

public class BrowserActivity extends AppCompatActivity implements SimpleGestureListener, View.OnClickListener { 

public ViewFlipper vFlipper; 

(...) 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

setContentView(R.layout.browse); 
vFlipper = (ViewFlipper) findViewById(R.id.viewFlipperBrowser); 

(...) 

} // onCreate() ends here 

// this method below works fine: 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    vFlipper.setDisplayedChild(item.getOrder()); 
    return true; 
} 

// and this one doesn't: 

public void displaySelectedFlag(int orderTag) { 
    vFlipper.setDisplayedChild(orderTag); // crashes here 
} 
} 

活動(2):

public class ListActivity extends Activity implements View.OnClickListener { 

private BrowserActivity browserActivity = new BrowserActivity(); 

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

    ImageButton imageA = (ImageButton) findViewById(R.id.img_a); 
    imageA.setOnClickListener(this); 

    ImageButton imageB = (ImageButton) findViewById(R.id.img_b); 
    imageB.setOnClickListener(this); 
} 

public void displayImageInfo(View view) { 
    String tagValue = (String) view.getTag(); 
    int tagId = Integer.parseInt(tagValue); 
    Intent intent = new Intent(this, BrowserActivity.class); 
    startActivity(intent); 
    browserActivity.displaySelectedImage(imageId); 
} 

@Override 
public void onClick(View view) { 
    displayImageInfo(view); 
} 
} 

Iがチェックされるように、活性と呼ばれる方法onClick()(2)のImageButtonのIDを取得し、それを通過します活動(1)へ。残念ながら、ViewFlipperを呼び出すと、NullPointerExceptionが発生します(行は上記のコードでマークされています(activity(1))。

なぜ起こるのか?

+1

アクティビティのオブジェクトを作成しない理由を説明します。 http://stackoverflow.com/questions/14956018/can-i-create-the-object-of-a-activity-in-other-class – Apoorv

答えて

1

他のアクティビティから1つのアクティビティを参照することはできません。 Android OSが "startActivity"を呼び出すことでActivityオブジェクトを作成させる必要があります。アクティビティのインスタンスとしてローカル変数を割り当てることは、実際には何も意味しません(BrowserActivityのインスタンス化など)。 Apoorvのコメントは、この件に関するまともな記事にリンクしています。

1つのアクティビティから別のアクティビティにデータを渡す場合は、インテントのバンドル内で追加情報を渡す必要があります。この投稿は詳細:https://stackoverflow.com/a/819427/504252

関連する問題