2015-10-04 1 views
0

Я работаю над представлением списка с помощью пользовательского адаптера, но кажется, что мой код не работает. Я не знаю, что не так. Кто-нибудь может мне помочь. Вот код, который я сделал:Настройка Android ListView с пользовательским адаптером

student_record.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

    <LinearLayout android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:layout_above="@+id/footerlayout" 
     android:id="@+id/listviewlayout"> 

     <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="top|start" 
       android:paddingTop="10dp" 
       android:paddingBottom="10dp" 
       android:paddingLeft="10dp" 
       android:paddingStart="10dp" 
       android:paddingRight="10dp" 
       android:paddingEnd="10dp" 
       android:background="@drawable/header" 
       android:text="@string/student_record" 
       android:textSize="15sp" 
       android:textColor="#ffffff" /> 

     <ListView 
      android:id="@+id/listView1" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" > 
     </ListView> 

    </LinearLayout> 

    <LinearLayout android:id="@+id/footerlayout" 
      android:layout_marginTop="3dip" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:gravity="center" 
      android:layout_alignParentBottom="true"> 

      <Button 
       android:id="@+id/tableOfSpecificationButton" 
       android:layout_width="match_parent" 
       android:layout_height="35dp" 
       android:layout_marginTop="10dp" 
       android:layout_marginLeft="10dp" 
       android:layout_marginStart="10dp" 
       android:layout_marginRight="10dp" 
       android:layout_marginEnd="10dp" 
       android:background="@drawable/roundedbutton" 
       android:text="@string/table_of_specifications" 
       android:textColor="#ffffff" 
       android:textSize="15sp" /> 


      <Button 
       android:id="@+id/itemAnalysisButton" 
       android:layout_width="match_parent" 
       android:layout_height="35dp" 
       android:layout_marginTop="10dp" 
       android:layout_marginBottom="10dp" 
       android:layout_marginLeft="10dp" 
       android:layout_marginStart="10dp" 
       android:layout_marginRight="10dp" 
       android:layout_marginEnd="10dp" 
       android:background="@drawable/roundedbutton" 
       android:text="@string/item_analysis" 
       android:textColor="#ffffff" 
       android:textSize="15sp" /> 

    </LinearLayout> 
    </RelativeLayout> 

student_row.xml

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 


     <TextView 
      android:id="@+id/studentTextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:paddingBottom="10dp" 
      android:layout_marginLeft="10dp" 
      android:layout_marginStart="10dp" 
      android:text="@string/hello_world" 
      android:textSize="17sp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/scoreTextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="15dp" 
      android:layout_marginEnd="15dp" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:layout_alignBaseline="@+id/studentTextView" 
      android:text="@string/hello_world" 
      android:textSize="17sp" 
      android:textStyle="bold" /> 

    </RelativeLayout> 

StudentRecord.java

package com.checkaidev1; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ListView; 


public class StudentRecord extends Activity { 

    private ListView listView1; 

    String[] score = new String[] { "10", "45", "34", "28", 
      "45", "30", "19", "33" 
      }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.student_record); 

     Student student_data[] = new Student[] 
       { 
       new Student("Ace"), 
       new Student("Brian"), 
       new Student("Cathy"), 
       new Student("Dave"), 
       new Student("Ethel") 
       }; 

     StudentRecordCustomAdapter adapter = new StudentRecordCustomAdapter(this, R.layout.student_row, student_data, score); 


     listView1 = (ListView)findViewById(R.id.listView1); 
     listView1.setAdapter(adapter); 

    } 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

    } 

} 

StudentRecordCustomAdapter.java

package com.checkaidev1; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class StudentRecordCustomAdapter extends ArrayAdapter<Student> { 

    Context ctx; 
    int layoutResourceId;  
    Student data[] = null; 
    String[] score; 
    LayoutInflater inflater; 

    public StudentRecordCustomAdapter(Context context, int layoutResourceId, Student data[], String[] score) { 
     super(context, layoutResourceId, data); 
     // TODO Auto-generated constructor stub 
     this.ctx = context; 
     this.layoutResourceId = layoutResourceId; 
     this.data = data; 
     this.score = score; 
    } 

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

     View row = convertView; 
     ViewHolder holder = null; 

     if(row == null) 
     { 
      LayoutInflater inflater = ((Activity)ctx).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new ViewHolder(); 
      holder.studentTextView = (TextView) convertView.findViewById(R.id.studentTextView); 
      holder.scoreTextView = (TextView) convertView.findViewById(R.id.scoreTextView); 

      row.setTag(holder); 

     } 

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

     Student student = data[position]; 
      holder.studentTextView.setText(student.name); 
      holder.scoreTextView = (TextView) convertView.findViewById(R.id.scoreTextView); 

      return row; 

    } 

    static class ViewHolder 
     { 
      TextView studentTextView; 
      TextView scoreTextView; 
     } 

} 

Спасибо!

+1

Я думаю, что вы не скопировали класс адаптера. вместо этого вы копировали действие два раза! – Shriram

+0

Какую проблему вы точно встретите? –

+0

Он просто показывает: «К сожалению, приложение остановилось». – KatrinaP

ответ

0

Прежде всего, у вас нет класса модели с именем Student. Хотя вы объявляете их студентом. Замените их на String. Запись таким образом

String student_data[] = new String[] 
      { 
        new String("Ace"), 
        new String("Brian"), 
        new String("Cathy"), 
        new String("Dave"), 
        new String("Ethel") 
      }; 
StudentRecordCustomAdapter adapter = new StudentRecordCustomAdapter(StudentRecord.this,R.layout.student_row,student_data,score); 

и получать их, как это

public StudentRecordCustomAdapter(Context context, int layoutResourceId, String data[], String[] score) { 
    super(context, layoutResourceId, data); 
    // TODO Auto-generated constructor stub 
    this.ctx = context; 
    this.layoutResourceId = layoutResourceId; 
    this.data = data; 
    this.score = score; 
} 

Это неправильно ..

String student = data[position]; 

Вы можете получить доступ и установить переменную Чтобы TextView Непосредственно .. Как

holder.studentTextView.setText(data[position]); 

Просмотрите свой код. Измените их И попробуйте еще раз, что вы хотите сделать ...

0

Предлагаю всегда предлагать BaseAdapter для каждого индивидуального адаптера, который необходимо использовать в вашем приложении. Ваш код кажется прекрасным.

0

Вы повторяете эту строку дважды в файле holder.scoreTextView = (TextView) convertView.findViewById (R.id.scoreTextView); секунда вы должны сделать holder.scoreTextView.setText (данные [позиция])