簡體   English   中英

java.lang.ClassCastException Adapter 轉換為 Activity

[英]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

*有時這將是ApplicationContext另一個實現。

以下錯誤:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM