2016-06-29 3 views
-2

У меня мой код определил путь ниже. Есть два важных мероприятия. Действие (1) показывает некоторые изображения в ViewFlipper. Он использует методы для загрузки желаемого изображения напрямую. Метод onOptionsItemSelected() извлекает данные из меню, определенного в связанном XML-макете R.layout.browse. Другой метод, displaySelectedFlag(), получает параметр тега, переданный из другого действия, назовем его активностью (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); 
} 
} 

Как я проверил, метод onClick() называется активности (2) извлекает идентификатор в ImageButton и передает его к деятельности (1). К сожалению, я получаю исключение NullPointerException при вызове ViewFlipper (строка помечена в приведенном выше коде, activity (1)).

Любая идея, почему это происходит?

+1

В этом ответе объясняется, почему вы не должны создавать объекты Деятельности. http://stackoverflow.com/questions/14956018/can-i-create-the-object-of-a-activity-in-other-class – Apoorv

ответ

1

Вы не можете ссылаться на одно действие из другого вида деятельности. Вы должны позволить ОС Android создать объект «Активность» через вызов «startActivity». Выделение локальной переменной как экземпляра Activity фактически не означает ничего (например, создание экземпляра BrowserActivity). Комментарий Апарва связывает с достойной статьей по этому вопросу.

Если вы хотите передавать данные из одной активности в другую, вам необходимо передать дополнительные функции в комплекте Intent. Этот пост подробно излагает: https://stackoverflow.com/a/819427/504252

Смежные вопросы