Android 用两个ArrayList填充列表视图

Android 用两个ArrayList填充列表视图,android,Android,我试图用两个字符串数组列表填充列表视图。这些ArrayList从另一个活动传递到listView活动 具有Listview的活动 public class DecisionActivity extends AppCompatActivity { ListView lv; customDecisionAdapter decisionAdapter; String[] array1, array2 ; ArrayList<String> l1; ArrayList&l

我试图用两个字符串数组列表填充
列表视图。这些ArrayList从另一个活动传递到
listView
活动

具有Listview的活动

public class DecisionActivity extends AppCompatActivity {
  ListView lv;
  customDecisionAdapter decisionAdapter;
  String[] array1, array2 ;
  ArrayList<String> l1;
  ArrayList<String> l2;
  TextView t1,t2;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_decision);
    t1=(TextView) findViewById(R.id.textForl1);
    t2=(TextView) findViewById(R.id.textForl2);
    lv= (ListView) findViewById(R.id.listViewDecision);
    Intent intent = getIntent();
    array1=intent.getStringArrayExtra("List1");
    array2=intent.getStringArrayExtra("List2");
    l1=new ArrayList<>(Arrays.asList(array1));
    l2=new ArrayList<>(Arrays.asList(array2));
    decisionAdapter=new customDecisionAdapter(getApplicationContext(),l1,l2);
    lv.setAdapter(decisionAdapter);
  }
}

我不知道我做错了什么。

检查
array2=intent.getStringArrayExtra(“列表2”)(在
决策活动
中)。它返回的数组比预期的小


同样,当您执行
t2.setText(list2.get(i))
(在
customDecisionAdapter
中),检查大小,并在按索引
读取时进行检查,如果(icheck
array2=intent.getStringArrayExtra(“List2”);
(在
DecisionActivity
中)。它返回的数组大小小于预期


另外,当您执行
t2.setText(list2.get(i));
(在
customDecisionAdapter
中)时,请检查大小,并在按索引
读取时进行检查如果(i请注意,您只返回列表1的大小

  @Override
  public int getCount() {
    return list1.size();
  }

无论如何,您只能返回一个列表的大小,这意味着如果list2与该大小不匹配,它将始终给出该错误。每当您使用多个列表的数据时,建议始终使用POJO类。

请注意,您只返回list1的大小

  @Override
  public int getCount() {
    return list1.size();
  }
//Replace your adapter code with this, I have check the size of Arraylist  
//inside getCount() and inside getview() method verify value
//of position not greater than size of Arraylist.

public class customDecisionAdapter extends BaseAdapter {
                Context context;
                private ArrayList<String> list1;
                private ArrayList<String> list2;

                public customDecisionAdapter(Context context, ArrayList<String>list1, ArrayList<String>list2) {
                    this.context= context;
                    this.list1= list1;
                    this.list2= list2;

                }

                @Override
                public View getView(int position, View view, ViewGroup viewGroup) {
                    View convertView =  view;
                    if(convertView==null){
                        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        convertView = inflater.inflate(R.layout.customedecisio,viewGroup,false);

                    }
                    TextView t1 = (TextView) convertView.findViewById(R.id.textDisease);
                    TextView t2 = (TextView) convertView.findViewById(R.id.textTotal);

                    // Verify value of position not greater than size of ArrayList.
                    if(position < list1.size())
                            t1.setText(list1.get(position));

                    if(position< list2.size())
                         t2.setText(list2.get(position));

                    return convertView;
                }

                @Override
                public int getCount()
                {
                    if(list1.size() < list2.size())
                      return list2.size();
                    else
                       return list1.size();
                }

                @Override
                public Object getItem(int position) {
                    return position;
                }

                @Override
                public long getItemId(int position) {
                    return position;
                }

            }
无论如何,您只能返回一个列表的大小,这意味着如果list2与该大小不匹配,它将始终给出该错误。每当您使用多个列表的数据时,建议始终使用POJO类。

//用此替换适配器代码,我已经检查了Arraylist的大小
//Replace your adapter code with this, I have check the size of Arraylist  
//inside getCount() and inside getview() method verify value
//of position not greater than size of Arraylist.

public class customDecisionAdapter extends BaseAdapter {
                Context context;
                private ArrayList<String> list1;
                private ArrayList<String> list2;

                public customDecisionAdapter(Context context, ArrayList<String>list1, ArrayList<String>list2) {
                    this.context= context;
                    this.list1= list1;
                    this.list2= list2;

                }

                @Override
                public View getView(int position, View view, ViewGroup viewGroup) {
                    View convertView =  view;
                    if(convertView==null){
                        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        convertView = inflater.inflate(R.layout.customedecisio,viewGroup,false);

                    }
                    TextView t1 = (TextView) convertView.findViewById(R.id.textDisease);
                    TextView t2 = (TextView) convertView.findViewById(R.id.textTotal);

                    // Verify value of position not greater than size of ArrayList.
                    if(position < list1.size())
                            t1.setText(list1.get(position));

                    if(position< list2.size())
                         t2.setText(list2.get(position));

                    return convertView;
                }

                @Override
                public int getCount()
                {
                    if(list1.size() < list2.size())
                      return list2.size();
                    else
                       return list1.size();
                }

                @Override
                public Object getItem(int position) {
                    return position;
                }

                @Override
                public long getItemId(int position) {
                    return position;
                }

            }
//内部getCount()和内部getview()方法验证值 //不大于Arraylist大小的位置。 公共类customDecisionAdapter扩展了BaseAdapter{ 语境; 私有数组列表1; 私有数组列表2; 公共customDecisionAdapter(上下文上下文,ArrayList1,ArrayList2){ this.context=context; this.list1=list1; this.list2=list2; } @凌驾 公共视图getView(内部位置、视图视图、视图组视图组){ 视图=视图; if(convertView==null){ LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务); convertView=充气机。充气(右布局。自定义决策,视图组,错误); } TextView t1=(TextView)convertView.findViewById(R.id.textDisease); TextView t2=(TextView)convertView.findViewById(R.id.textTotal); //验证位置值是否不大于ArrayList的大小。 如果(位置
//用这个替换适配器代码,我已经检查了Arraylist的大小
//内部getCount()和内部getview()方法验证值
//不大于Arraylist大小的位置。
公共类customDecisionAdapter扩展了BaseAdapter{
语境;
私有数组列表1;
私有数组列表2;
公共customDecisionAdapter(上下文上下文,ArrayList1,ArrayList2){
this.context=context;
this.list1=list1;
this.list2=list2;
}
@凌驾
公共视图getView(内部位置、视图视图、视图组视图组){
视图=视图;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(右布局。自定义决策,视图组,错误);
}
TextView t1=(TextView)convertView.findViewById(R.id.textDisease);
TextView t2=(TextView)convertView.findViewById(R.id.textTotal);
//验证位置值是否不大于ArrayList的大小。
如果(位置
“无效索引2,大小为2”
表示大小为2,因此有效索引仅为0和1。而索引2处没有任何内容。那么是什么导致了问题?为什么不使用Arr