自定义数组适配器到listview错误

时间:2018-04-16 08:08:21

标签: java android arrays

我想将几个对象放到listView中,但是我收到了错误

这是我的android代码:

public class ViewDosen extends AppCompatActivity {                                                            

    TextView tvWelcome;                                                                                       
    ListView listView;                                                                                        
    List<Publikasi> lstPublikasi;                                                                             
    String namaDosen,kodeDosen;                                                                               
    PublikasiAdapter publikasiAdapter;                                                                        





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


        SharedPreferences DataDosen = getSharedPreferences("Dosen", Context.MODE_PRIVATE);                    
        kodeDosen = DataDosen.getString("kodeDosen","");                                                      
        namaDosen = DataDosen.getString("namaDosen","");                                                      

        tvWelcome = (TextView) findViewById(R.id.tvWelcome);                                                  
        tvWelcome.setText("Welcome "+namaDosen+"("+kodeDosen+")");                                            

        listView = (ListView) findViewById(R.id.lstPublikasi);                                                

        lstPublikasi = new ArrayList<>();                                                                     

        publikasiAdapter = new PublikasiAdapter(lstPublikasi,getApplicationContext());                        

        listView.setAdapter(publikasiAdapter);                                                                

        Publikasi publikasi1 = new Publikasi("ijadi","Scopus","Submit","Sebelum 2015");                                                                                     

        Publikasi publikasi2 = new Publikasi("asfs","Scopus","Submit","Ganjil 2019");                         

        lstPublikasi.add(publikasi1);                                                                         
        lstPublikasi.add(publikasi2);                                                                         

                                                                                                     }         

这是我的模特:

public class Publikasi {
    public String namaJurnal,tipePublikasi,status,periode;

    public Publikasi(String namaJurnal,String tipePublikasi,String status,String periode) {
        this.namaJurnal = namaJurnal;
        this.tipePublikasi = tipePublikasi;
        this.status = status;
        this.periode = periode;

    }

}

这是我的适配器:

public class PublikasiAdapter extends ArrayAdapter<Publikasi>{

    private List<Publikasi> lstPublikasi;
    private Context mCtx;

    public PublikasiAdapter(List<Publikasi> P,Context c){
        super(c, R.layout.list_publikasi,P);
        this.lstPublikasi = P;
        this.mCtx = c;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View view = inflater.inflate(R.layout.list_publikasi,null,true);

        TextView textNama = (TextView) view.findViewById(R.id.textNama);
        TextView textDetail = (TextView) view.findViewById(R.id.textDetail);
        TextView textStatus = (TextView) view.findViewById(R.id.textStatus);
        TextView textPeriode = (TextView) view.findViewById(R.id.textPeriode);

        Publikasi publikasi = lstPublikasi.get(position);
        textNama.setText(publikasi.namaJurnal);
        textDetail.setText(publikasi.tipePublikasi);
        textStatus.setText(publikasi.status);
        textPeriode.setText(publikasi.periode);

        return super.getView(position, convertView, parent);
    }
}

xml代码:

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

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textNama"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textDetail"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textStatus"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textPeriode"/>

</LinearLayout>

这是我的错误消息:

  

PID:3388 java.lang.IllegalStateException:ArrayAdapter需要   资源ID是一个TextView   android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)   引起:java.lang.ClassCastException:android.widget.LinearLayout   无法强制转换为android.widget.TextView   android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379)

2 个答案:

答案 0 :(得分:0)

试试这个

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(mCtx);
    // View view = inflater.inflate(R.layout.list_publikasi,null,true);
    if(converView == null) {
         convertView = inflater.inflate(R.layout.item_user, parent, false);
    }

    TextView textNama = (TextView) convertView.findViewById(R.id.textNama);
    TextView textDetail = (TextView) convertView.findViewById(R.id.textDetail);
    TextView textStatus = (TextView) convertView.findViewById(R.id.textStatus);
    TextView textPeriode = (TextView) convertView.findViewById(R.id.textPeriode);

    Publikasi publikasi = lstPublikasi.get(position);
    textNama.setText(publikasi.namaJurnal);
    textDetail.setText(publikasi.tipePublikasi);
    textStatus.setText(publikasi.status);
    textPeriode.setText(publikasi.periode);

    return convertView;
}

答案 1 :(得分:0)

为什么你在Publikasiadapter上添加项目之前通过publikasi arraylist?这可能是导致问题的原因。并返回publikasi适配器上的视图

相关问题