2016-04-20 2 views
0

Я пытаюсь вызвать метод share() из фрагмента. доля() находится в MainActivity.javaКак вызвать метод MainActivity

Button shareButton = new Button(getActivity()); 
shareButton.setOnClickListener(new View.onClickListener() { 
    @Override 
    public void onClick(View v) { 
     MainActivity ma = new MainActivity(); 
     ma.share();    //Doesn't work! NullPointerException 
    } 
} 

доля():

public void share() { 
    Intent i = new Intent(); 
    i.setAction(Intent.ACTION_SEND); 
    i.setType("text/plain"); 
    i.putExtra(Intent.EXTRA_TEXT, shareString); 
    startActivity(Intent.createChooser(i, "Say Something")); 
} 
+0

((MainActivity) контекст) .share (v); – sushildlh

+0

Как использовать View V в вашей общей функции? Отправьте свой logcat –

+0

, прежде чем просто объявите 'частный контекст MainActivity; ' – sushildlh

ответ

1

Изменить

MainActivity ma = new MainActivity(); 

Для

MainActivity ma = (MainActivity) getActivity(); 

getActivity() возвращает экземпляр Activity так его м усть быть отлиты

+0

getActivity() возвращает FragmentActivity (поскольку я пытаюсь вызвать из фрагмента – ShiftyCodes

+0

Фрагмент и фрагментАтрибуция - это не одно и то же. GetActivity() вернет родительскую активность Фрагмент –

+0

Извините, да, вам просто нужно передать действие, возвращенное из getActivity(), в качестве вашего MainActivity – Robbie188

0

Например изменить:

MainActivity ma = new MainActivity(); 

Для этого:.

MainActivity ma = (MainActivity) getActivity(); 
0

((MainActivity) getActivity()) имяМетода это поможет, попробуйте его

0

от разработки программного обеспечения Принципы разработки

public class Utils { 
    public static void share(Context context,String shareString) { 
     Intent i = new Intent(); 
     i.setAction(Intent.ACTION_SEND); 
     i.setType("text/plain"); 
     i.putExtra(Intent.EXTRA_TEXT, shareString); 
     context.startActivity(Intent.createChooser(i, "#CrystalMaths")); 

    } 
} 

и везде, где вы будете использовать

Utils.share(getApplicationContext(),"share this line"); 

это делает наш код для повторного использования и сплоченной

+0

. Исправьте имя класса, чтобы он подчинялся суждениям о присвоении имен JavaBeans. –

+0

спасибо @Gabriel, сделано, но почему вы не сделали что отредактировал и выиграл +2 репутацию –

+0

Поскольку мне нужно было изменить не менее 6 символов для редактирования, а было только 2. –

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