Отображение элементов ArrayList в ListView содержит 2 просмотра текста - PullRequest
0 голосов
/ 09 марта 2012

Я хочу отобразить элементы arrayList в ListView, который имеет 2 разных textView. Я использую ListViewCustomAdapter и getView (), getItem () ... методы есть.

Это мой код: MyCustom.java:

public class MyCustom extends BaseAdapter {
  public Activity context;  
  public LayoutInflater inflater; 
  ArrayList mylist;

  public MyCustom(Activity context,ArrayList viewList) {
        super();
        this.context=context;
        this.mylist=viewList;

        inflater=(LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

  }

  @Override
  public int getCount() {
    // TODO Auto-generated method stub
    return mylist.size();
  }

  @Override
  public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
  }

  @Override
  public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
  }


  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    View List;
    if(convertView==null)
    {
        List=new View(context);
        LayoutInflater mLayoutinflater=(LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        List=mLayoutinflater.inflate(R.layout.listitem_row, parent, false);
    }
    else
    {
        List=(View)convertView;

    }

    TextView t1=(TextView)List.findViewById(R.id.txtViewTitle);
    t1.setText((CharSequence) mylist.get(position));

    TextView t2=(TextView)List.findViewById(R.id.txtViewDescription);
    t2.setText(mylist.get(position).toString());


    return List;
  }
}

Над кодом есть проблема, как указано ниже. Это будет отображать элементы arrayList одинаковыми в обоих текстовых представлениях в ListView. Пример: MyList = [ 'a1', 'a2', 'b1', 'b2'] это мой arraylist и передается в MyCustomAdapter.

Во время выполнения «a1» будет отображаться в обоих текстовых представлениях и т. Д.

Я хочу отобразить 'a1' в textView1, а 'a2' в textView2 .. и b1 это .. и так далее ...

Я думаю, у меня могут быть проблемы в методах getItem (), getItemId (), getcount (). ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ ...

Ответы [ 3 ]

2 голосов
/ 09 марта 2012

Из вашего вопроса ясно, что вы хотите отобразить [a1, a2, b1, b2, c1, c2 ...] как

a1a2
b1b2
c1c2

, поэтому вам нужно изменить код следующим образом:

@Override
public int getCount() {
    // TODO Auto-generated method stub
    if(myList.size()%2==0)
        return mylist.size()/2;
    else
        return myList.size()/2+1;
}

и метод getView, как показано ниже:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    View List;
    if(convertView==null)
    {
        List=new View(context);
        LayoutInflater mLayoutinflater=(LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        List=mLayoutinflater.inflate(R.layout.listitem_row, parent, false);
    }
    else
    {
        List=(View)convertView;

    }

    TextView t1=(TextView)List.findViewById(R.id.txtViewTitle);
    t1.setText((CharSequence) mylist.get(position*2));


    TextView t2=(TextView)List.findViewById(R.id.txtViewDescription);
    if(position*2<getCount())
           t2.setText(mylist.get(position*2+1).toString());


    return List;
}
0 голосов
/ 09 марта 2012

У вас неверная реализация в некоторых методах адаптера.

getItem () должен вернуть объект из вашего списка в позиции:

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

Затем в getView

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //  Create view
    //   ...

    String[] item = (String[])getItem(position);  //  Get the current object at 'position'


    //  Update your view here
    TextView t1=(TextView)List.findViewById(R.id.txtViewTitle);
    t1.setText(item[0]);

    TextView t2=(TextView)List.findViewById(R.id.txtViewDescription);
    t2.setText(item[1]);
}

Если вы хотите отобразить две разные строки, я предлагаю, чтобы ваш список выглядел следующим образом

[new String[]{"a1", "a2"}, new String[]{"b1", "b2"}, ...]
0 голосов
/ 09 марта 2012

ваш адаптер getview идеален, но ваша логика неверна .. Я бы предпочел сделать объект класса с 2 строками, например.

public class MyClass
{
  String one;
  String two;
}

и сделать ваш список как

ArrayList<MyClass> mylist = new ArrayList<MyClass>();

и затем установите текст, как вы хотите.

TextView t1=(TextView)List.findViewById(R.id.txtViewTitle);
t1.setText(mylist.get(position).one);           //String one= "a1" according to position in mylist
                                                //it will be = "b1" on next position
                                              //no need of casting to CharSequence

TextView t2=(TextView)List.findViewById(R.id.txtViewDescription);
t2.setText(mylist.get(position).two);           //String two= "a2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...