Как настроить прослушиватель щелчка на кнопке, сгенерированной моим адаптером? - PullRequest
0 голосов
/ 14 сентября 2011

Это мой простой адаптер:

public class MainAdapter extends BaseAdapter {

    private Context mContext;

    private Integer[] mText = {
            R.string.main_team,
            R.string.main_league,
            R.string.main_economy,
            R.string.main_arena,
            R.string.main_staff,
            R.string.main_team_up
    };

    public MainAdapter(Context c) {
        mContext = c;
    }

    @Override
    public int getCount() {
        return mText.length;
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Button buttonView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            buttonView = new Button(mContext);
            buttonView.setLayoutParams(new GridView.LayoutParams(85, 45));
            //imageView.setScaleType(Button.ScaleType.CENTER_CROP);
            buttonView.setPadding(4, 4, 4, 4);
        } else {
            buttonView = (Button) convertView;
        }

        buttonView.setText(mText[position]);
        return buttonView;
    }

}

У каждой кнопки должно быть свое собственное намерение.Я думал об использовании корпуса переключателя, основанного на положении, но он кажется действительно «глупым» в качестве решения.

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Я бы создал новый объект, например. ActivityLaunchButtonData для сохранения кнопки «Текст» и кнопки «Намерение».

Тогда у меня будет массив объектов ActivityLaunchButtonData.

Тогда в методе getView я получу что-то вроде:

ActivityLaunchButtonData activityLaunchButtonData = activityLaunchButtonDataArray[position];
buttonView.setText(activityLaunchButtonData.getText());
buttonView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = activityLaunchButtonData.getIntent();
            startActivity(intent);
        }
    });
0 голосов
/ 15 сентября 2011

Если вы знаете, в вашем адаптере намерение запустить и данные для его вставки вы можете попробовать что-то вроде этого:

public class MainAdapter extends BaseAdapter implements OnClickListener {

    private Context mContext;
    private Activity mActivity;

    private Integer[] mText = {
        R.string.main_team,
        R.string.main_league,
        R.string.main_economy,
        R.string.main_arena,
        R.string.main_staff,
        R.string.main_team_up
    };

    public MainAdapter(Context c,Activity a) {
        mContext = c;
        mActivity = a;
    }

    ...

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Button buttonView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            buttonView = new Button(mContext);
            buttonView.setLayoutParams(new GridView.LayoutParams(85, 45));
            //imageView.setScaleType(Button.ScaleType.CENTER_CROP);
            buttonView.setPadding(4, 4, 4, 4);
        } else {
            buttonView = (Button) convertView;
        }

        buttonView.setText(mText[position]);
        // For exemple a String, but setTag takes an object
        buttonView.setTag("dataToSendThrewTheIntent");
        buttonView.setOnClickListener(this);
        return buttonView;
    }

    @Override
    public void onClick(View v) {
        String dataToSendThrewTheIntent = (String) v.getTag();
        Intent i = new Intent(mContext, DestinationActivity.class);
        i.putExtra("key", dataToSendThrewTheIntent);
        mActivity.startActivity(i);
    }
}

Этот метод позволяет избежать нескольких прослушивателей onClick.

...