2013-05-07 2 views
0

Я отображая детали в виде списка из базы данных с помощью этого кода:Как отобразить два значения в строке списка?

ListView lv=getListView(); 
      ListAdapter adapter=new ArrayAdapter<String>(DisplayDetails.this, R.layout.view_animal_entry, R.id.animalName, listvalues); 
      lv.setAdapter(adapter); 

в listvalues ​​ здесь является ArrayList ...

getiing значения в ArrayList:

WayDataBase way=new WayDataBase(getApplicationContext());   
     ArrayList<String> listvalues=way.getListDetails(appno); 

getListDetails():

public List<String[]> getListDetails(String rowid) 
{ 
    openOrCreateDatabase(); 
    createAllValuesTable(); 

    List<String[]> recentdata=new ArrayList<String[]>(); 
    //String selectQuery="select * from allvaluestable where ROWID="+rowid; 
    Cursor c=db.rawQuery("select * from allvaluestable where _id ='"+rowid+"'", null); 
    String[] values = null; 
    if (c != null) { 
     c.moveToLast(); 

     while (c.isBeforeFirst() != true) { 
      for (int i = 0; i < 280; i++) { 
       values[i]=c.getString(i); 
       System.out.println("Db print**" + recentdata.get(i)); 
      } 
      c.moveToPrevious(); 
     } 
     recentdata.add(values); 
     c.close(); 
    } else { 
     recentdata.add(values); 
    } 
    closeDatabase(); 

    return recentdata; 
} 

Можно ли отображать два элемента в каждой строке списка? ??? как и в том, что я хочу отобразить имя атрибута и значение этого атрибута, например имя-abc middlename-xyz lastname-pqr как это сделать ??? и ват изменения мне нужно сделать в xml-файле? сообщите мне об этом! , пожалуйста, помогите! спасибо заранее

+0

Проверьте это http://www.heikkitoivonen.net/blog/2009/02/15/multicolumn-listview-in-android/ .. – Nirmal

+0

код приятный и понятный, но icant, похоже, фигурирует как я могу использовать свои arraylists вместо этих строк в адаптере ??? – shivani

ответ

2

Вам нужно сделать пользовательский адаптер и переопределить GetView()

public class AdapterWine extends ArrayAdapter<Wine> { 

private Context context; 
private int layoutResourceId; 
List<Wine> wines; 
List<Wine> originalValues; 

List<Wine> arrayList;  

public AdapterWine(Context context, int layoutResourceId, List<Wine> wines) { 
    super(context, layoutResourceId, wines); 

    this.context = context; 
    this.layoutResourceId = layoutResourceId; 
    this.wines = wines; 
    this.originalValues = wines; 
} 

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


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    ViewHolder holder = null; 

    if(row == null) { 

     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new ViewHolder(); 
     holder.iconImg = (ImageView)row.findViewById(R.id.iconImg); 
     holder.topText = (TextView)row.findViewById(R.id.topText); 
     holder.bottomText = (TextView)row.findViewById(R.id.bottomText); 

     row.setTag(holder); 
    } else { 
     holder = (ViewHolder)row.getTag(); 
    } 

    Wine wine = wines.get(position); 

    switch(wine.getType()) { 

     case blanc: 
      holder.iconImg.setImageResource(R.drawable.wineiconwhite); 
      break; 

     case rouge: 
      holder.iconImg.setImageResource(R.drawable.wineiconrouge); 
      break; 

     case rose: 
      holder.iconImg.setImageResource(R.drawable.wineiconrose); 
      break; 
    } 

    holder.topText.setText(wine.getName()); 
    holder.bottomText.setText(wine.getCepage()+" - "+wine.getMillesime()); 

    return row; 
} 

private static class ViewHolder { 
    ImageView iconImg; 
    TextView topText, bottomText; 
} 

}

0

Создать пользовательский адаптер и переопределить GetView()

AndroidListView

0

место два TextViews в вашем view_animal_entry.xml, переопределите getView в вашем адаптере и установите эти два TextViews

0

Вы можете проверить это руководство, я написал о том, как создать собственный адаптер из ArrayList:

Multi-clickable ListView

+0

Где я вставляю код для ViewHolder ??? в MainActivity ???? – shivani

+0

Да, действительно. Вы должны пройти его как часть кода операции. –

0

создать новый файл XML в Рез/макет/папку с двумя TextView с внутри LinearLayout и проход идентификатор этого макета как второй аргумент в контенте ArrayAdapter. Это должно сделать трюк

+0

и как сделать вывод, что я помещаю его в адаптер массива .... например: «Адаптер ListAdapter = новый ArrayAdapter (DisplayDetails.this, R.layout.view_animal_entry, {R.id.animalName, R.id.viewname }, listvalues) '........ этот синтаксис правильный ??? – shivani

0

Создайте адаптер для спискаView и переопределите функцию getView(). В функции getView() вы должны создавать два TextView каждый раз, когда он вызывается автоматически, и помещать два значения в них, которые вы хотите отобразить.

 public class ListViewAdapter extends BaseAdapter 
     { 

       private Context context; 
       private View listView; 
       List<String> name; 

     public ListViewAdapter (Context c, List<String> name,View v) 
     { 
       context = c; 
       this.listView = listView; 
       this.name = name; 
     } 

     public int getCount() { 
      return name.size(); 
     } 

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

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

     public View getView(int position, View convertView, ViewGroup parent) 
     { 
       LinearLayout row=new LinearLayout(context); 

     TextView name=new TextView(context); 
     name.setText(//firstName); 
     name.setTextSize(18); 
     name.setTextColor(theme.getItemColorGrid()); 

     TextView mname=new TextView(context); 
     mname.setText(//middleName); 
     mname.setTextSize(18); 
     mname.setTextColor(theme.getItemColorGrid()); 

     TextView lname=new TextView(context); 
     lname.setText(//lastName); 
     lname.setTextSize(18); 
     lname.setTextColor(theme.getItemColorGrid()); 

       row.addView(fname); 
       row.addView(mname); 
       row.addView(lname); 

       return row; 

} 

    //Calling the adapter 

       ListView listView=new ListView(ActivityMName.this); 
       listView.setAdapter(new ListViewAdapter(ActivityName.this,listNames,listView); 

Вам нужно найти подстроку имени как имя, фамилию, имя, отчество. и помещаем их в текст.

0

попробуйте это.

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 

WayDataBase way=new WayDataBase(getApplicationContext());   
List<String[]> listvalues=way.getListDetails(appno); 

for (String[] name : listvalues) { 

    HashMap<String, String> map = new HashMap<String, String>(); 

           map.put("firstname", name[0]); 
           map.put("middlename", name[1]); 
           mylist.add(map); 

      // Keys used in Hashmap 
        String[] from1 = {"firstname", "middlename"}; 

         // Ids of views in listview_layout 
        int[] to1 = { R.id.one, R.id.two}; 

       // Instantiating an adapter to store each items 
      // R.layout.listview_layout defines the layout of each item 

    SimpleAdapter adapter1 = new SimpleAdapter(getBaseContext(), mylist, R.layout.row1, from1, to1); 

      lv.setAdapter(adapter1); 

Надеюсь, это даст вам некоторое решение. Для более reference

+0

показывает ошибку несоответствия типа в строке ** для ** для значений list и name. – shivani

+0

Используйте это имя класса вместо String. – Nirmal

+0

В противном случае используйте Список listvalues ​​= way.getListDetails (appno); вместо ArrayList listvalues ​​= way.getListDetails (appno); – Nirmal

Смежные вопросы