Android переопределяет несколько классов в активности - PullRequest
0 голосов
/ 18 августа 2011

Непосредственный ответ: нет, это невозможно в Java. Я понимаю это, и это немного странный вопрос, но я уже давно так кодирую, и мне всегда казалось, что это грязный метод, поэтому я хотел бы уточнить, что я делаю , Скажем, например, у меня есть Activity, которая расширяет класс Activity, так что я могу использовать onCreate и т. Д. И т. Д. ... в этом Activity у меня есть SimpleCursorAdapter, который заполняет ListView.

String sql = "SELECT * FROM myTable";
Cursor data = database.rawQuery(sql, null);
String fields[] = {"field1", "field2", "field3"};
adapter = new CustomCursorAdapter(this, R.layout.custom_row, data, fields, new int[] { R.id.Field1, R.id.Field2, R.id.Field2 });
list.setAdapter(adapter);

Я назвал этот CustomCursorAdapter, потому что я создаю совершенно новый класс с именем CustomCursorAdapter, который расширяет SimpleCursorAdapter, чтобы я мог использовать такие методы, как bindView, newView и т. Д., Чтобы использовать кнопки в моих объектах ListView.

public class CustomCursorAdapter extends SimpleCursorAdapter {

private Context myContext;
private myActivity parentActivity;
private Button delButton;    

public CustomCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
    super(context, layout, c, from, to);
    myContext = context;
    parentActivity = (myActivity) myContext;

@Override
public void bindView(View view, Context context, Cursor cursor) {
    int idColumn = cursor.getColumnIndex("_id");
    final int getId = cursor.getInt(idColumn);
    final double increment = 0.25;

    UnitsConversions convert = new UnitsConversions();

    int nameColumn = cursor.getColumnIndex("name");
    String getName = cursor.getString(nameColumn);
    TextView name = (TextView)view.findViewById(R.id.GrainName);
    name.setText(getName);

    delButton = (Button)view.findViewById(R.id.DeleteButton);
    delButton.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View arg0) {
            parentActivity.deleteItem(getId);
        }           
    });


@Override
public View newView(Context context, Cursor cursor, final ViewGroup parent) {
    View view = View.inflate(context, R.layout.list_item, null);
    return view;
}

Я сократил свой код здесь, чтобы использовать его в качестве примера, поэтому, если я удалю все, что делает этот нерабочий код, я извиняюсь, но нерабочий код не является целью моего вопроса. Мой вопрос заключается в том, является ли это единственным способом переопределения методов, если я не расширю само действие с помощью SimpleCursorAdapter? Это не кажется большой проблемой, но когда у меня есть 10 различных действий, все выполняющие в основном одно и то же, но с разными ListViews и элементами, и мне нужно создать 10 различных CustomCursorAdapter, это кажется грязным и избыточным. Может быть, есть способ создать только 1 другое действие, а затем передать нужные мне предметы? Кажется, что было бы намного чище просто использовать SimpleCursorAdapter вместо того, чтобы создавать собственный и переопределять нужные мне методы прямо в Activity. Если я неправильно назвал этот вопрос, пожалуйста, не стесняйтесь редактировать.

1 Ответ

0 голосов
/ 18 августа 2011

Да, есть более хороший способ.Вы можете создать подкласс Activity (и объявить его абстрактным, если хотите), который реализует переопределенные версии каждого метода, в котором вы делитесь кодом между своими 10 классами.Затем для каждого реального действия, которое вам нужно, расширьте этот подкласс действия и просто внесите необходимые изменения в каждый метод.Если метод отличается в каждом классе, но разделяет большую часть своего кода с другими операциями, вы можете вызвать общий метод super.method () и затем применить конкретные изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...