直接答案是否定的,这在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中覆盖我需要的方法会更加清晰。如果我没有正确命名这个问题,请随时编辑。
答案 0 :(得分:0)
是的,有一个更好的方法。您可以创建一个Activity的子类(如果愿意,可以将其声明为抽象),它实现了在10个类中共享代码的每个方法的覆盖版本。然后,对于您需要的每个实际Activity,扩展Activity的子类,只需对每个方法进行所需的更改。如果每个类中的方法不同但是将其大部分代码与其他活动共享,则可以调用常规super.method()然后应用特定更改。