Я помещаю слишком много кода в мой привычный адаптер для просмотра списка?

Я думаю, что у меня слишком много кода в моем CustomAdapter для моего списка. Нормально ли иметь несколько кликов, редактирование базы данных и код всплывающего окна в CustomAdapter?

Я рассмотрел, как переместить код в класс активности, в котором находится просмотр списка, но это либо невозможно, либо очень сложно. У меня нет особого опыта, поэтому трудно следовать некоторым из более технических методов кодирования.

1 ответ

Я изучил, как переместить код в класс активности, в котором находится просмотр списка, но это либо невозможно, либо очень сложно

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

Если вы хотите переместить код в действие, то вы можете использовать интерфейсы

Например, с некоторыми данными Item класс который у тебя в адаптере.

// ... BaseAdapter, ArrayAdapter, RecyclerView.Adapter... Same difference
public class YourAdapter extends BaseAdapter {

    public interface OnItemActionListener {
        void onItemEdited(Item x);
        void onItemAdded(Item x);
        void onItemClicked(Item x);
        // etc.
    }

    public OnItemActionListener listener; // should make private with a setter method

    ...

        // somewhere in the adapter
        Item x = getItem(position);

        if (listener != null) {
            listener.onItemClicked(item);
        }

    ...

}

И ваша активность может реализовать этот интерфейс.

public YourActivity extends Activity 
    implements YourAdapter.OnItemActionListener {

    @Override
    public void onItemClicked(Item x) {
        Log.d("item click", String.valueOf(x));
    }

    @Override
    public void onItemAdded(Item x) {
        Log.d("item added", String.valueOf(x));
    }

    @Override
    protected void onCreate(Bundle b){
        super.onCreate(b);
        setContentView... ;

        adapter = new YourAdapter... ;
        adapter.listener = this; // Should use a setter method instead
    }

}

В соответствии с этим

Нормально ли иметь несколько кликов

Вам нужен только один интерфейс для onClick(View v) и вы можете проверить v.getId() против любого R.id значение, чтобы увидеть, что нажимается.

Другие вопросы по тегам