如何个性化一个arrayAdapter?
How to personalize one arrayAdapter?
在我的项目中,我需要在两个不同的活动中显示相同的 arrayList。在 MainActivity 中,我只需要显示具有 isConsumido 属性 = false 的项目。在 TelaCadastrados activity 中,我需要显示整个 arrayList。我该怎么做?
package com.example.breno.seenme;
public class CustomAdapter extends ArrayAdapter<ItemCultural> {
public CustomAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
public CustomAdapter(Context context, int resource, List<ItemCultural> items) {
super(context, resource, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(this.getItem(position).isConsumido()){
// I Think the code to hide elements with isConsumido = true
}else{
}
return v;
}
}
在我的 MainActivity 适配器实例中。
CustomAdapter myAdapter = new CustomAdapter(this, android.R.layout.simple_list_item_1, CustomAdapter.VIEW_TYPE_MAINACTIVITY);
这个 customAdapter 如何识别我的列表?
我的自定义适配器:
package com.example.breno.seenme;
public class CustomAdapter extends ArrayAdapter<ItemCultural> {
public static final int VIEW_TYPE_MAINACTIVITY = 124; // or some random int.
public static final int VIEW_TYPE_TELACADAS = 125; // or some random int.
private int viewType;
List<ItemCultural> lista;
public CustomAdapter(Context context, int textViewResourceId, int viewType) {
super(context, textViewResourceId);
this.viewType = viewType;
}
public CustomAdapter(Context context, int resource, List<ItemCultural> items, int viewType) {
super(context, resource, items);
this.viewType = viewType;
this.lista = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (viewType == VIEW_TYPE_MAINACTIVITY) {
// DO your logic for mainActivity version of the list.
// I Think the code to hide elements with isConsumido = true
if (!lista.get(position).isConsumido()) {
//showThisView(v);
v.setVisibility(View.GONE);
} else {
v.setVisibility(View.VISIBLE);
}
} else if (viewType == VIEW_TYPE_TELACADAS) {
// DO your logic for Telacadas version of the list
} else {
// UNSUPPORTED VIEW TYPE.
}
return v;
}
}
你有2个选项。在您的 MainActivity 中,您可以将您的数据的副本传递给您的适配器,其中只有 isConsumido == false 条目。或者,您可以向适配器添加一些逻辑以跳过 isConsumido == true 的项目。您必须更新 getCount() 和 getView() 方法以考虑要跳过的项目。
这是内存(第一个解决方案中的更多内存)与复杂性(第二个解决方案更复杂,但内存效率更高,因为它使用单个列表)之间的通常权衡。
在构造适配器时,传递要渲染的视图类型,列表的 MainActivity
版本或列表的 TelaCadastradosActivity
版本。
所以你把你的适配器修改成这个
package com.example.breno.seenme;
public class CustomAdapter extends ArrayAdapter<ItemCultural> {
public static final int VIEW_TYPE_MAINACTIVITY = 124; // or some random int.
public static final int VIEW_TYPE_TELACADAS = 125; // or some random int.
private int viewType;
List<ItemCultural> lista;
private final LayoutInflater mInflater;
private int resource;
public CustomAdapter(Context context, int textViewResourceId, int viewType) {
super(context, textViewResourceId);
this.viewType = viewType;
mInflater = LayoutInflater.from(context);
}
public CustomAdapter(Context context, int resource, List<ItemCultural> items, int viewType) {
super(context, resource, items);
this.viewType = viewType;
this.lista = items;
mInflater = LayoutInflater.from(context);
this.resource = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if (convertView == null) {
v = mInflater.inflate(resource, parent, false);
} else {
v = convertView;
}
if (viewType == VIEW_TYPE_MAINACTIVITY) {
// DO your logic for mainActivity version of the list.
// I Think the code to hide elements with isConsumido = true
if (!lista.get(position).isConsumido()) {
//showThisView(v);
v.setVisibility(View.GONE);
} else {
v.setVisibility(View.VISIBLE);
((TextView)v).setText(lista.get(position).toString());
}
} else if (viewType == VIEW_TYPE_TELACADAS) {
// DO your logic for Telacadas version of the list
} else {
// UNSUPPORTED VIEW TYPE.
}
return v;
}
}
并且在你的 MainActivity
中你像这样实例化你的适配器
final CustomAdapter arrayAdapterOrdenado = new CustomAdapter(this, android.R.layout.simple_list_item_1, regraDeNegocioSingleton.getListaDeItensSingleton().getListaDeItensCulturais(). CustomAdapter.VIEW_TYPE_MAINACTIVITY);
对于您传入 TelaCadas 视图类型的 TelaCadasActivity
final CustomAdapter arrayAdapterOrdenado = new CustomAdapter(this, android.R.layout.simple_list_item_1, regraDeNegocioSingleton.getListaDeItensSingleton().getListaDeItensCulturais(). CustomAdapter.VIEW_TYPE_TELACADAS);
在我的项目中,我需要在两个不同的活动中显示相同的 arrayList。在 MainActivity 中,我只需要显示具有 isConsumido 属性 = false 的项目。在 TelaCadastrados activity 中,我需要显示整个 arrayList。我该怎么做?
package com.example.breno.seenme;
public class CustomAdapter extends ArrayAdapter<ItemCultural> {
public CustomAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
public CustomAdapter(Context context, int resource, List<ItemCultural> items) {
super(context, resource, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(this.getItem(position).isConsumido()){
// I Think the code to hide elements with isConsumido = true
}else{
}
return v;
}
}
在我的 MainActivity 适配器实例中。
CustomAdapter myAdapter = new CustomAdapter(this, android.R.layout.simple_list_item_1, CustomAdapter.VIEW_TYPE_MAINACTIVITY);
这个 customAdapter 如何识别我的列表?
我的自定义适配器:
package com.example.breno.seenme;
public class CustomAdapter extends ArrayAdapter<ItemCultural> {
public static final int VIEW_TYPE_MAINACTIVITY = 124; // or some random int.
public static final int VIEW_TYPE_TELACADAS = 125; // or some random int.
private int viewType;
List<ItemCultural> lista;
public CustomAdapter(Context context, int textViewResourceId, int viewType) {
super(context, textViewResourceId);
this.viewType = viewType;
}
public CustomAdapter(Context context, int resource, List<ItemCultural> items, int viewType) {
super(context, resource, items);
this.viewType = viewType;
this.lista = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (viewType == VIEW_TYPE_MAINACTIVITY) {
// DO your logic for mainActivity version of the list.
// I Think the code to hide elements with isConsumido = true
if (!lista.get(position).isConsumido()) {
//showThisView(v);
v.setVisibility(View.GONE);
} else {
v.setVisibility(View.VISIBLE);
}
} else if (viewType == VIEW_TYPE_TELACADAS) {
// DO your logic for Telacadas version of the list
} else {
// UNSUPPORTED VIEW TYPE.
}
return v;
}
}
你有2个选项。在您的 MainActivity 中,您可以将您的数据的副本传递给您的适配器,其中只有 isConsumido == false 条目。或者,您可以向适配器添加一些逻辑以跳过 isConsumido == true 的项目。您必须更新 getCount() 和 getView() 方法以考虑要跳过的项目。
这是内存(第一个解决方案中的更多内存)与复杂性(第二个解决方案更复杂,但内存效率更高,因为它使用单个列表)之间的通常权衡。
在构造适配器时,传递要渲染的视图类型,列表的 MainActivity
版本或列表的 TelaCadastradosActivity
版本。
所以你把你的适配器修改成这个
package com.example.breno.seenme;
public class CustomAdapter extends ArrayAdapter<ItemCultural> {
public static final int VIEW_TYPE_MAINACTIVITY = 124; // or some random int.
public static final int VIEW_TYPE_TELACADAS = 125; // or some random int.
private int viewType;
List<ItemCultural> lista;
private final LayoutInflater mInflater;
private int resource;
public CustomAdapter(Context context, int textViewResourceId, int viewType) {
super(context, textViewResourceId);
this.viewType = viewType;
mInflater = LayoutInflater.from(context);
}
public CustomAdapter(Context context, int resource, List<ItemCultural> items, int viewType) {
super(context, resource, items);
this.viewType = viewType;
this.lista = items;
mInflater = LayoutInflater.from(context);
this.resource = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if (convertView == null) {
v = mInflater.inflate(resource, parent, false);
} else {
v = convertView;
}
if (viewType == VIEW_TYPE_MAINACTIVITY) {
// DO your logic for mainActivity version of the list.
// I Think the code to hide elements with isConsumido = true
if (!lista.get(position).isConsumido()) {
//showThisView(v);
v.setVisibility(View.GONE);
} else {
v.setVisibility(View.VISIBLE);
((TextView)v).setText(lista.get(position).toString());
}
} else if (viewType == VIEW_TYPE_TELACADAS) {
// DO your logic for Telacadas version of the list
} else {
// UNSUPPORTED VIEW TYPE.
}
return v;
}
}
并且在你的 MainActivity
中你像这样实例化你的适配器
final CustomAdapter arrayAdapterOrdenado = new CustomAdapter(this, android.R.layout.simple_list_item_1, regraDeNegocioSingleton.getListaDeItensSingleton().getListaDeItensCulturais(). CustomAdapter.VIEW_TYPE_MAINACTIVITY);
对于您传入 TelaCadas 视图类型的 TelaCadasActivity
final CustomAdapter arrayAdapterOrdenado = new CustomAdapter(this, android.R.layout.simple_list_item_1, regraDeNegocioSingleton.getListaDeItensSingleton().getListaDeItensCulturais(). CustomAdapter.VIEW_TYPE_TELACADAS);