【发布时间】:2017-09-18 14:23:05
【问题描述】:
我的应用需要能够更改显示在网格视图中的可绘制对象,主要是颜色和显示的一些信息。不同的样式有不同的 .java 和 XML 文件。
不同的 .java 文件用于显示同一事物的不同类型,因此从共享父级继承,例如 basicrunner 扩展 runner 和 lollipoprunner 扩展 runner。
适配器扩展了 BaseAdapter,并覆盖了 getItem 等方法,但它们指定了一种返回类型;
public class RunnersAdapter extends BaseAdapter {
private static final String TAG = "RunnersAdapter";
//used in switch statement to decide which XML to inflate
private static final int LayoutTYPE_1 = 1;
private static final int LayoutTYPE_2 = 2;
private static final int LayoutTYPE_3 = 3;
int layout = 2; //hard coded just for testing
@Override
public Runner getItem(int position) { //runner is superclass
return mRunners.get(mKeys[position]);
}
有没有办法为每种类型的跑步者使用这个 RunnersAdapter,或者我最好为每种类型制作不同的适配器?
编辑:
这是对只需要显示一种数据类型(即 Runner)的适配器的升级。现在我们要显示多种不同类型的跑步者,但不一定要制作多种类型的适配器。
更多代码来说明我的意思:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(layout == LayoutTYPE_1){ //LollipopView
Runner runner = getItem(position); //should be a lollipopRunner!!
gridView = inflater.inflate(R.layout.lollipopRunner, null); //use lollipopRunner XML
}else if(layout == LayoutTYPE_2){
Runner runner = getItem(position); //should be basicRunner!!
gridView = inflater.inflate(R.layout.basicrunner, null); //use basic runner XML
如上图,重写的getItem方法返回类型“Runner”,是BasicRunner和LollipopRunner的父类。
是否有正确的多态性应用程序可以让它工作?每个 Runner 都需要新的适配器吗?
【问题讨论】:
-
所以你的gridview中的视图类型是一样的,只是不同的drawables不同?或者每个项目可以附加不同的视图类型?
-
@pskink 是的,gridview 中的每个项目都将属于同一类型,即所有 basicRunner 或所有 lollipopRunner。可绘制对象会发生变化,数据类型也会发生变化。我将编辑我的 OP 以包含更多代码
-
我在询问是否会为每个项目显示相同的视图 - 例如,仅使用具有不同内容/背景可绘制或不同视图的
TextView -
我明白了,是的,它只会显示在 gridView 中。没有改变视图,只有drawables和与之关联的java类
标签: java android polymorphism adapter