Android覆盖活动中的多个类

Android覆盖活动中的多个类,android,android-activity,overriding,adapter,Android,Android Activity,Overriding,Adapter,直接的答案是否定的,这在Java中是不可能的。我理解这一点,这是一个有点无趣的问题,但我已经用这种方式编码了一段时间,我一直觉得这是一种肮脏的方法,所以我想澄清一下我在做什么。比如说,我有一个活动正在扩展Activity类,这样我就可以使用onCreate等。在这个活动中,我有一个SimpleCorsorAdapter来填充ListView String sql = "SELECT * FROM myTable"; Cursor data = database.rawQuery(sql, nul

直接的答案是否定的,这在Java中是不可能的。我理解这一点,这是一个有点无趣的问题,但我已经用这种方式编码了一段时间,我一直觉得这是一种肮脏的方法,所以我想澄清一下我在做什么。比如说,我有一个活动正在扩展Activity类,这样我就可以使用onCreate等。在这个活动中,我有一个SimpleCorsorAdapter来填充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,因为我正在创建一个名为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个不同的活动时,所有的活动基本上都在做相同的事情,但是有不同的列表视图和项目,我必须创建10个不同的CustomCursorAdapter,这看起来既脏又多余。也许有办法只创建一个其他活动,然后传入我需要的项目?如果只使用SimpleCursorAdapter,而不必创建自定义的方法并覆盖活动中所需的方法,似乎会更简洁。如果我没有正确命名这个问题,请随意编辑。

是的,有更好的方法。如果愿意,您可以创建Activity的子类并将其声明为抽象的,它实现了每个方法的重写版本,在这些方法中,您可以跨10个类共享代码。然后,对于您需要的每个实际活动,扩展活动的子类,只需对每个方法进行所需的更改。如果一个方法在每个类中不同,但与其他活动共享其大部分代码,那么您可以调用通用的super.method,然后应用特定的更改。

好的,那么您的意思是创建一个名为SubActivity的新类或其他什么,并扩展活动,然后在同一子活动中声明另一个类,并扩展SimpleCursorAdapter和我可能需要的任何其他类。然后扩展这个子活动,我将从多个类中获得我的所有方法,我可以自行重写这些方法?我可以举个例子吗?可以。对于一个非常简单的示例,imagine SubActivity声明了一个名为tv的公共实例变量TextView,并编写了其onCreate方法来调用该TextView上的setContentView。然后在每个实际活动中,在onCreate中,您只需调用super.onCreate,然后说tv.setTextSome String;您不必在每个子类中声明TextView,也不必重复setContentView行,只需要更改活动特定文本的行。这很有意义,但是基本上没有办法在子类中调用多个类,然后在实际活动中扩展子类,这样我就可以覆盖子类中声明的所有类了吗?对于每一个不同的活动,我都有不同的变量,所以尝试重用这部分代码对我来说没有多大意义。我更希望能够覆盖活动中的方法,这样我就可以保持所需的一切整洁,而不必有Activity1、CustomAdapter1、Activity2、CustomAdapter2等。