Callback from Adapter

后端 未结 1 1350
终归单人心
终归单人心 2020-12-06 11:16

So I have a custom listview. It\'s like Instagram layout with 1 image and bunch of buttons in each list items. So here\'s the problem:

I want to implement the share

相关标签:
1条回答
  • 2020-12-06 12:07

    You need to tell the adapter which implementation of the OnShareClickedListener() to use. Right now in your adapter the field mCallback is never assigned to, either you need to have a setOnSharedClickedListener() method in your adapter which you then call from your mainActivity and set it with the main activity's implementation or you need to take in the constructor.

    My suggestion would be to use a setter instead of constructor. So what you need to do is this.

    Your 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 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.");
        }
    }
    

    Your MainActivty

    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);
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题