自定义阵列适配器到列表视图错误



我想将几个对象放入列表视图,但是我遇到了错误

这是我的安卓代码:

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 位于 android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386( 原因:java.lang.ClassCastException: android.widget.LinearLayout 不能投射到 android.widget.TextView at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379(

试试这个

@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;
}

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

最新更新