![](/img/trans.png)
[英]java.lang.ClassCastException: Activity cannot be cast to MainActivity
[英]java.lang.ClassCastException Adapter cast to an Activity
我有這樣的功能
private void goToSalesActList(View view) {
CustomerActivity ca = (CustomerActivity)view.getTag();
Intent intent = new Intent(this, SalesActListActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable(Const.OBJ_USER, user);
bundle.putParcelable("CustomerListActivity", ca);
intent.putExtras(bundle);
startActivity(intent);
}
我有一個錯誤,比如那一行的 blockquote
java.lang.ClassCastException: com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder 不能轉換為 com.kreators.nvmobile.dashboard.SalesActActivity$CustomerActivity
CustomerActivity ca = (CustomerActivity)view.getTag();
簡單地說,我想將我的類函數 CustomerActivity 上的一些數據打包到意圖 SalesActListActivity 但我有這樣的錯誤。 誰能幫我 ? 至少,這是我的 CustomerActivity 功能
static class CustomerActivity implements Parcelable {
public int id, qty, AROD, HAVE, Visit;
public String code, name, sales, salesname, target, amt, psi;
public CustomerActivity(JSONObject o) {
try {
id = o.getInt("CustId");
code = o.getString("CustCode");
name = o.getString("CustDesc");
salesname = o.getString("Salesname");
sales = o.getString("Sales");
target = o.getString("SITarget");
amt = o.getString("SIAmt");
psi = o.getString("persenPSI");
qty = o.getInt("SOQty");
AROD= o.getInt("AROD");
HAVE= o.getInt("HAVE");
Visit= o.getInt("Visit");
} catch (JSONException e) {}
}
protected CustomerActivity(Parcel in) {
id = in.readInt();
qty = in.readInt();
code = in.readString();
name = in.readString();
salesname = in.readString();
sales = in.readString();
target = in.readString();
amt = in.readString();
psi = in.readString();
AROD = in.readInt();
HAVE = in.readInt();
Visit = in.readInt();
}
public static final Creator<CustomerActivity> CREATOR = new Creator<CustomerActivity>() {
@Override
public CustomerActivity createFromParcel(Parcel in) {
return new CustomerActivity(in);
}
@Override
public CustomerActivity[] newArray(int size) {
return new CustomerActivity[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeInt(id);
parcel.writeInt(qty);
parcel.writeString(code);
parcel.writeString(name);
parcel.writeString(salesname);
parcel.writeString(sales);
parcel.writeString(target);
parcel.writeString(amt);
parcel.writeString(psi);
parcel.writeInt(AROD);
parcel.writeInt(HAVE);
parcel.writeInt(Visit);
}
}
java.lang.ClassCastException: com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder 無法轉換為 com.kreators.nvmobile.dashboard.SalesActActivity$CustomerActivity 在 com.kreators.nvmobile.dashboard.SalesActActivity.goToSalesActList(SalesAct.Activity) ) 在 com.kreators.nvmobile.dashboard.SalesActActivity.access$000(SalesActActivity.java:33) 在 com.kreators.nvmobile.dashboard.SalesActActivity$1.onItemClick(SalesActActivity.java:256) 在 android.widget.AdapterView.performItem( AdapterView.java:305) 在 android.widget.AbsListView.performItemClick(AbsListView.java:1146) 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:3053) 在 android.widget.AbsListView$3.run(AbsListView. java:3865) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5345) at java.lang.reflect.Method.invoke(Native Method) at java.lang.refl ect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:947) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:第742章)
這是我的錯誤信息
對不起,我的語法不好,我是新手謝謝
代替
CustomerActivity ca = (CustomerActivity)view.getTag();
和
CustomerActivity ca = (CustomerActivity)view.getContext();
在 Android 中,每個View
實例一旦創建,就可以訪問它的Context
,在大多數情況下*將是一個Activity
。
*有時這將是Application
或Context
另一個實現。
以下錯誤:
java.lang.ClassCastException: com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder cannot be cast to com.kreators.nvmobile.dashboard.SalesActActivity$CustomerActivity
發生的原因是您嘗試使用以下命令將 ViewHolder 轉換為 CustomerActivity 對象:
private void goToSalesActList(View view) {
CustomerActivity ca = (CustomerActivity)view.getTag();
...
}
從你的評論:
當我單擊列表視圖時,我將該標簽設置為讀取到下一個意圖
您需要使用 setTag 將對象設置為您單擊的項目視圖,如下所示:
// selected item view
View view;
...
CustomerActivity selectedItem;
...
view.setTag(selectedItem);
// Then you can call the method with item
goToSalesActList(view);
上面的代碼只是一個偽代碼,因為如果沒有您提供 Adapter 類代碼,我無法確定您的代碼在做什么。
邊注:
您需要遵循 Android 項目的命名約定。 例如,不鼓勵為 pojo 使用CustomerActivity
名稱,因為 Android 開發人員通常認為每個以Activity
結尾的類名都是一個Activity
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.