Android覆盖活动中的多个类

时间:2011-08-18 13:20:28

标签: android android-activity override adapter

直接答案是否定的,这在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,它看起来很脏和多余。也许有办法只创建一个其他活动,然后传递我需要的项目?看起来使用SimpleCursorAdapter而不是必须创建自定义的并且在Activity中覆盖我需要的方法会更加清晰。如果我没有正确命名这个问题,请随时编辑。

1 个答案:

答案 0 :(得分:0)

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