ListView 只显示一项
ListView shows only one item
我正在尝试在 ListView 中显示 Json。我正在使用 Map
来检索值。列表中仅显示第一项。 getCount() in BaseAdapter
returns 即使 Map
中有多个值,每次大小都为 1。
MyContactAdapter2 .java
public class MyContactAdapter2 extends BaseAdapter {
List<Map<String, List<EffectList>>> contactList;
Context context;
private LayoutInflater mInflater;
// Constructors
public MyContactAdapter2(Context context, List<Map<String, List<EffectList>>> objects) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
contactList = objects;
}
public MyContactAdapter2() {
System.out.println("hai");
}
@Override
public int getCount() {
int count = contactList.size();
System.out.println("Count size" + count);
return count;
}
@Override
public Map<String, List<EffectList>> getItem(int position) {
return contactList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println(10);
final MyContactAdapter2.ViewHolder vh;
if (convertView == null) {
View view = mInflater.inflate(R.layout.get_layout_row_view, parent, false);
vh = MyContactAdapter2.ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (MyContactAdapter2.ViewHolder) convertView.getTag();
}
for (Map<String, List<EffectList>> map : contactList) {
for (Map.Entry<String, List<EffectList>> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
System.out.println("key :" + key + "value :" + value);
EffectList item = getItem(position).get(key).get(0);
vh.textViewName.setText(item.getEffectsId());
vh.textViewEmail.setText(item.getEffectsName());
}
}
return vh.rootView;
}
private static class ViewHolder {
public final RelativeLayout rootView;
public final ImageView imageView;
public final TextView textViewName;
public final TextView textViewEmail;
private ViewHolder(RelativeLayout rootView, ImageView imageView, TextView textViewName, TextView textViewEmail) {
this.rootView = rootView;
this.imageView = imageView;
this.textViewName = textViewName;
this.textViewEmail = textViewEmail;
}
public static MyContactAdapter2.ViewHolder create(RelativeLayout rootView) {
ImageView imageView = (ImageView) rootView.findViewById(R.id.imageView);
TextView textViewName = (TextView) rootView.findViewById(R.id.textViewName);
TextView textViewEmail = (TextView) rootView.findViewById(R.id.textViewEmail);
return new MyContactAdapter2.ViewHolder(rootView, imageView, textViewName, textViewEmail);
}
}
}
我在迭代地图时做错了什么吗?
这是我正在尝试解析的 Json。
{
"effect_list": [{
"1":[
{
"effects_id":"1",
"effects_name":"Band 1"
},
{
"effects_id":"2",
"effects_name":"Band 2"
}
],
"2": [
{
"effects_id":"4",
"effects_name":"Background Blur"
},
{
"effects_id":"5",
"effects_name":"Blemish Removal"
}
]
}]
}
我想显示 1(0) 和 2(0)。 ListView
中仅显示 1(0) ("effects_id":"1")
为什么我的 getCount() 大小总是 1,即使它有多个值?
您的列表视图仅显示一项,因为您只有一项。 effect_list
只有一个元素:
{
"1": [
{
"effects_id": "1",
"effects_name": "Band 1"
},
{
"effects_id": "2",
"effects_name": "Band 2"
}
],
"2": [
{
"effects_id": "4",
"effects_name": "Background Blur"
},
{
"effects_id": "5",
"effects_name": "Blemish Removal"
}
]
}
我认为有更好的方法添加到列表中
ArrayList<EffectList> data = new ArrayList<>();
for (Map<String, List<EffectList>> map : contactList) {
for (Map.Entry<String, List<EffectList>> entry : map.entrySet()) {
String key = entry.getKey();
List<EffectList> value = entry.getValue();
data.addAll(value);
}
}
MyContactAdapter2 mAdpter = new MyContactAdapter2(this,data);
list.setAdapter(mAdpter);
然后在适配器
中使用那个data
列表
public class MyContactAdapter2 extends BaseAdapter {
ArrayList<EffectList> contactList;
Context context;
private LayoutInflater mInflater;
// Constructors
public MyContactAdapter2(Context context, ArrayList<EffectList> data ) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
contactList = data ;
}
public MyContactAdapter2() {
System.out.println("hai");
}
@Override
public int getCount() {
int count = contactList.size();
System.out.println("Count size" + count);
return count;
}
@Override
public EffectList getItem(int position) {
return contactList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println(10);
final MyContactAdapter2.ViewHolder vh;
if (convertView == null) {
View view = mInflater.inflate(R.layout.get_layout_row_view, parent, false);
vh = MyContactAdapter2.ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (MyContactAdapter2.ViewHolder) convertView.getTag();
}
EffectList item = getItem(position);
vh.textViewName.setText(item.getEffectsId());
vh.textViewEmail.setText(item.getEffectsName());
return vh.rootView;
}
让你的json喜欢以下内容并相应地使用。
{
"effect_list": [
{
"effects_id":"1",
"effects_name":"Band 1"
},
{
"effects_id":"2",
"effects_name":"Band 2"
},
{
"effects_id":"4",
"effects_name":"Background Blur"
},
{
"effects_id":"5",
"effects_name":"Blemish Removal"
}
]
}
您可以通过 effect_list.size 并获取每个值
试试这个,
public class MyContactAdapter2 extends BaseAdapter {
List<EffectList> contacts;
Context context;
private LayoutInflater mInflater;
// Constructors
public MyContactAdapter2(Context context, List<Map<String, List<EffectList>>> objects) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
this.contacts = new ArrayList<>();
Map<String, List<EffectList>> map = objects.get(0);
Set<String> keySet = map.keySet();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
this.contacts.addAll(map.get(iterator.next()));
}
}
public MyContactAdapter2() {
System.out.println("hai");
}
@Override
public int getCount() {
int count = contacts.size();
return count;
}
@Override
public EffectList getItem(int position) {
return contacts.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println(10);
final MyContactAdapter2.ViewHolder vh;
if (convertView == null) {
View view = mInflater.inflate(R.layout.get_layout_row_view, parent, false);
vh = MyContactAdapter2.ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (MyContactAdapter2.ViewHolder) convertView.getTag();
}
EffectList item = getItem(position);
vh.textViewName.setText(item.getEffectsId());
vh.textViewEmail.setText(item.getEffectsName());
return vh.rootView;
}
private static class ViewHolder {
public final RelativeLayout rootView;
public final ImageView imageView;
public final TextView textViewName;
public final TextView textViewEmail;
private ViewHolder(RelativeLayout rootView, ImageView imageView, TextView textViewName, TextView textViewEmail) {
this.rootView = rootView;
this.imageView = imageView;
this.textViewName = textViewName;
this.textViewEmail = textViewEmail;
}
public static MyContactAdapter2.ViewHolder create(RelativeLayout rootView) {
ImageView imageView = (ImageView) rootView.findViewById(R.id.imageView);
TextView textViewName = (TextView) rootView.findViewById(R.id.textViewName);
TextView textViewEmail = (TextView) rootView.findViewById(R.id.textViewEmail);
return new MyContactAdapter2.ViewHolder(rootView, imageView, textViewName, textViewEmail);
}
}
}
我正在尝试在 ListView 中显示 Json。我正在使用 Map
来检索值。列表中仅显示第一项。 getCount() in BaseAdapter
returns 即使 Map
中有多个值,每次大小都为 1。
MyContactAdapter2 .java
public class MyContactAdapter2 extends BaseAdapter {
List<Map<String, List<EffectList>>> contactList;
Context context;
private LayoutInflater mInflater;
// Constructors
public MyContactAdapter2(Context context, List<Map<String, List<EffectList>>> objects) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
contactList = objects;
}
public MyContactAdapter2() {
System.out.println("hai");
}
@Override
public int getCount() {
int count = contactList.size();
System.out.println("Count size" + count);
return count;
}
@Override
public Map<String, List<EffectList>> getItem(int position) {
return contactList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println(10);
final MyContactAdapter2.ViewHolder vh;
if (convertView == null) {
View view = mInflater.inflate(R.layout.get_layout_row_view, parent, false);
vh = MyContactAdapter2.ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (MyContactAdapter2.ViewHolder) convertView.getTag();
}
for (Map<String, List<EffectList>> map : contactList) {
for (Map.Entry<String, List<EffectList>> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
System.out.println("key :" + key + "value :" + value);
EffectList item = getItem(position).get(key).get(0);
vh.textViewName.setText(item.getEffectsId());
vh.textViewEmail.setText(item.getEffectsName());
}
}
return vh.rootView;
}
private static class ViewHolder {
public final RelativeLayout rootView;
public final ImageView imageView;
public final TextView textViewName;
public final TextView textViewEmail;
private ViewHolder(RelativeLayout rootView, ImageView imageView, TextView textViewName, TextView textViewEmail) {
this.rootView = rootView;
this.imageView = imageView;
this.textViewName = textViewName;
this.textViewEmail = textViewEmail;
}
public static MyContactAdapter2.ViewHolder create(RelativeLayout rootView) {
ImageView imageView = (ImageView) rootView.findViewById(R.id.imageView);
TextView textViewName = (TextView) rootView.findViewById(R.id.textViewName);
TextView textViewEmail = (TextView) rootView.findViewById(R.id.textViewEmail);
return new MyContactAdapter2.ViewHolder(rootView, imageView, textViewName, textViewEmail);
}
}
}
我在迭代地图时做错了什么吗?
这是我正在尝试解析的 Json。
{
"effect_list": [{
"1":[
{
"effects_id":"1",
"effects_name":"Band 1"
},
{
"effects_id":"2",
"effects_name":"Band 2"
}
],
"2": [
{
"effects_id":"4",
"effects_name":"Background Blur"
},
{
"effects_id":"5",
"effects_name":"Blemish Removal"
}
]
}]
}
我想显示 1(0) 和 2(0)。 ListView
为什么我的 getCount() 大小总是 1,即使它有多个值?
您的列表视图仅显示一项,因为您只有一项。 effect_list
只有一个元素:
{
"1": [
{
"effects_id": "1",
"effects_name": "Band 1"
},
{
"effects_id": "2",
"effects_name": "Band 2"
}
],
"2": [
{
"effects_id": "4",
"effects_name": "Background Blur"
},
{
"effects_id": "5",
"effects_name": "Blemish Removal"
}
]
}
我认为有更好的方法添加到列表中
ArrayList<EffectList> data = new ArrayList<>();
for (Map<String, List<EffectList>> map : contactList) {
for (Map.Entry<String, List<EffectList>> entry : map.entrySet()) {
String key = entry.getKey();
List<EffectList> value = entry.getValue();
data.addAll(value);
}
}
MyContactAdapter2 mAdpter = new MyContactAdapter2(this,data);
list.setAdapter(mAdpter);
然后在适配器
中使用那个data
列表
public class MyContactAdapter2 extends BaseAdapter {
ArrayList<EffectList> contactList;
Context context;
private LayoutInflater mInflater;
// Constructors
public MyContactAdapter2(Context context, ArrayList<EffectList> data ) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
contactList = data ;
}
public MyContactAdapter2() {
System.out.println("hai");
}
@Override
public int getCount() {
int count = contactList.size();
System.out.println("Count size" + count);
return count;
}
@Override
public EffectList getItem(int position) {
return contactList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println(10);
final MyContactAdapter2.ViewHolder vh;
if (convertView == null) {
View view = mInflater.inflate(R.layout.get_layout_row_view, parent, false);
vh = MyContactAdapter2.ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (MyContactAdapter2.ViewHolder) convertView.getTag();
}
EffectList item = getItem(position);
vh.textViewName.setText(item.getEffectsId());
vh.textViewEmail.setText(item.getEffectsName());
return vh.rootView;
}
让你的json喜欢以下内容并相应地使用。
{
"effect_list": [
{
"effects_id":"1",
"effects_name":"Band 1"
},
{
"effects_id":"2",
"effects_name":"Band 2"
},
{
"effects_id":"4",
"effects_name":"Background Blur"
},
{
"effects_id":"5",
"effects_name":"Blemish Removal"
}
]
}
您可以通过 effect_list.size 并获取每个值
试试这个,
public class MyContactAdapter2 extends BaseAdapter {
List<EffectList> contacts;
Context context;
private LayoutInflater mInflater;
// Constructors
public MyContactAdapter2(Context context, List<Map<String, List<EffectList>>> objects) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
this.contacts = new ArrayList<>();
Map<String, List<EffectList>> map = objects.get(0);
Set<String> keySet = map.keySet();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
this.contacts.addAll(map.get(iterator.next()));
}
}
public MyContactAdapter2() {
System.out.println("hai");
}
@Override
public int getCount() {
int count = contacts.size();
return count;
}
@Override
public EffectList getItem(int position) {
return contacts.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println(10);
final MyContactAdapter2.ViewHolder vh;
if (convertView == null) {
View view = mInflater.inflate(R.layout.get_layout_row_view, parent, false);
vh = MyContactAdapter2.ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (MyContactAdapter2.ViewHolder) convertView.getTag();
}
EffectList item = getItem(position);
vh.textViewName.setText(item.getEffectsId());
vh.textViewEmail.setText(item.getEffectsName());
return vh.rootView;
}
private static class ViewHolder {
public final RelativeLayout rootView;
public final ImageView imageView;
public final TextView textViewName;
public final TextView textViewEmail;
private ViewHolder(RelativeLayout rootView, ImageView imageView, TextView textViewName, TextView textViewEmail) {
this.rootView = rootView;
this.imageView = imageView;
this.textViewName = textViewName;
this.textViewEmail = textViewEmail;
}
public static MyContactAdapter2.ViewHolder create(RelativeLayout rootView) {
ImageView imageView = (ImageView) rootView.findViewById(R.id.imageView);
TextView textViewName = (TextView) rootView.findViewById(R.id.textViewName);
TextView textViewEmail = (TextView) rootView.findViewById(R.id.textViewEmail);
return new MyContactAdapter2.ViewHolder(rootView, imageView, textViewName, textViewEmail);
}
}
}