How to call main activity's function from custom ArrayAdapter?

后端 未结 2 1266
感情败类
感情败类 2020-12-30 08:10

I\'ve looked at a lot of similar questions and can\'t seem to get anything to work. I have a main class with a function like this that edits shows a dialog box then edits a

相关标签:
2条回答
  • 2020-12-30 08:48

    Your EditPlayerAdapter gets a Context passed to it. Activity extends Context

    If the Context passed is your EditPlayers and you store a class-scoped reference to that Context in your Adapter, you can then do:

    ((EditPlayers) yourContextVar).function();
    

    Better yet, make an interface of some sort. It will help clarify and organise your code and it applies the same principle.

    0 讨论(0)
  • 2020-12-30 09:05

    I would recommend providing an interface back to your activity that lets it know when that button is pressed. I would not recommend calling an activity's method from an ArrayAdapter. It is too tightly coupled.

    Try something like this:

    Your Activity

    public class EditPlayers extends SherlockFragmentActivity implements EditPlayerAdapterCallback {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            EditPlayerAdapter adapter = new EditPlayerAdapter(this,
                    R.layout.score_row_edit_player, listScoreEdit);
            adapter.setCallback(this);
            listPlayerNames.setAdapter(adapter);
    
        }
    
        private void deletePlayer(final int position) {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                    EditPlayers.this);
    
            // Setting Dialog Title
            alertDialog.setTitle("Delete Player");
    
            // Setting Dialog Message
            alertDialog.setMessage("Are you sure?");
    
            // Setting Delete Button
            alertDialog.setPositiveButton("Delete",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            listScoreEdit.remove(position);
                            updateListView();
                        }
                    });
    
            // Setting Cancel Button
            alertDialog.setNeutralButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
    
            // Showing Alert Message
            alertDialog.show();
        }
    
        @Override
        public void deletePressed(int position) {
    
            deletePlayer(position);
        }
    
    }
    

    Adapter:

    public class EditPlayerAdapter extends ArrayAdapter {
    
        private EditPlayerAdapterCallback callback;
    
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
    
            convertView = (LinearLayout) inflater.inflate(resource, null);    
            Score score = getItem(position);
            TextView txtName = (TextView) convertView.findViewById(R.id.nameEdit);
            txtName.setText(score.getName());
            Button b = (Button)convertView.findViewById(R.id.deletePlayer);
            b.setTag(position);
            b.setOnClickListener(new View.OnClickListener() {
                     public void onClick(View v) {
    
                         if(callback != null) {
    
                            callback.deletePressed(position);
                         }
                     }
             });
            return convertView;
        }
    
        public void setCallback(EditPlayerAdapterCallback callback){
    
            this.callback = callback;
        }
    
    
        public interface EditPlayerAdapterCallback {
    
            public void deletePressed(int position);
        }
    }
    
    0 讨论(0)
提交回复
热议问题