Обратный звонок от адаптера

Поэтому у меня есть собственный список. Это как схема Instagram с 1 изображением и связкой кнопок в каждом элементе списка. Итак, вот проблема:

Я хочу реализовать кнопку совместного доступа. Для этого я попытался создать обратный вызов от адаптера к активности. Но, похоже, это не сработало. Вот что я до сих пор (я обрезал несвязанные части):

Основная деятельность

public class MainActivity extends ActionBarActivity implements ListAdapter.OnShareClickedListener{ ListView main_list; List<String> url_list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); main_list = (ListView) findViewById(R.id.listView); ListAdapter nListAdapter = new ListAdapter(context, url_list); main_list.setAdapter(nListAdapter); } @Override public void ShareClicked(String url) { Log.e("Test",url); } } 

ListAdapter

 public class ListAdapter extends BaseAdapter implements View.OnClickListener { OnShareClickedListener mCallback; Context context; public static List<String> url_list; public ListAdapter(Context c, List<String> list) { this.context = c; url_list = list; } public interface OnShareClickedListener { public void ShareClicked(String url); } @Override public void onClick(View v) { mCallback.ShareClicked("Share this text."); } } } 

Журнал ошибок:

 Attempt to invoke interface method 'void com.packagename.ListAdapter$OnShareClickedListener.ShareClicked(java.lang.String)' on a null object reference 

Вам нужно указать адаптер, для которого используется функция OnShareClickedListener (). Прямо сейчас в вашем адаптере поле mCallback никогда не назначается, либо вам нужно иметь метод setOnSharedClickedListener () в вашем адаптере, который затем вы вызываете из своей mainActivity и устанавливаете его с реализацией основного действия, или вам нужно взять конструктор.

Мое предложение было бы использовать setter вместо конструктора. Так что вам нужно сделать это.

Ваш список

 public class ListAdapter extends BaseAdapter implements View.OnClickListener { OnShareClickedListener mCallback; Context context; public static List<String> url_list; public ListAdapter(Context c, List<String> list) { this.context = c; url_list = list; } public void setOnShareClickedListener(OnShareClickedListener mCallback) { this.mCallback = mCallback; } public interface OnShareClickedListener { public void ShareClicked(String url); } @Override public void onClick(View v) { mCallback.ShareClicked("Share this text."); } } 

Ваша основная информация

 public class MainActivity extends ActionBarActivity implements ListAdapter.OnShareClickedListener{ ListView main_list; List<String> url_list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); main_list = (ListView) findViewById(R.id.listView); ListAdapter nListAdapter = new ListAdapter(this, url_list); nListAdapter.setOnShareClickedListener(this); main_list.setAdapter(nListAdapter); } @Override public void ShareClicked(String url) { Log.e("Test", url); } }