TEL:400-8793-956
当前位置:程序、服务器

当我单击列表视图上的项目时,列表视图未使我返回到DetailActivity.class

提问者: 近期获赞: 浏览人数: 发布时间:2021-01-06 13:04:38

 问:我在使用ListView时遇到麻烦。每当我按列表中的项目时,它总是使我返回登录页面。它应该转到详细信息页面。 

 
家庭活动
 
package com.example.kun.carcarkila;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import com.amigold.fundapter.BindDictionary;
import com.amigold.fundapter.FunDapter;
import com.amigold.fundapter.extractors.StringExtractor;
import com.amigold.fundapter.interfaces.DynamicImageLoader;
import com.kosalgeek.android.json.JsonConverter;
import com.kosalgeek.genasync12.AsyncResponse;
import com.kosalgeek.genasync12.PostResponseAsyncTask;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.io.Serializable;
import java.util.ArrayList;
public class HomeActivity extends AppCompatActivity implements AsyncResponse, AdapterView.OnItemClickListener {
final String LOG = "HomeActivity";
private ArrayList<Product> productList;
private ListView lvProduct;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    ImageLoader.getInstance().init(UILConfig.config(HomeActivity.this)); // Do it on Application start
    PostResponseAsyncTask taskRead = new PostResponseAsyncTask(HomeActivity.this, this);
    taskRead.execute("http://10.0.2.2/carkila/product.php");
}
@Override
public void processFinish(String s) {
            productList = new JsonConverter<Product>().toArrayList(s, Product.class);
    BindDictionary<Product> dict = new BindDictionary<Product>();
    dict.addDynamicImageField(R.id.ivImg, new StringExtractor<Product>() {
        @Override
        public String getStringValue(Product item, int position) {
            return item.img;
        }
    }, new DynamicImageLoader() {
        @Override
        public void loadImage(String url, ImageView imageView) {
            ImageLoader.getInstance().displayImage(url, imageView); // Default options will be used
        }
    });
    dict.addStringField(R.id.tvCarModel, new StringExtractor<Product>() {
        @Override
        public String getStringValue(Product item, int position) {
            return "Car Model: " + item.Car_Model;
        }
    });
    dict.addStringField(R.id.tvCarType, new StringExtractor<Product>() {
        @Override
        public String getStringValue(Product item, int position) {
            return "Car Type: " +  item.Car_Type;
        }
    });
    dict.addStringField(R.id.tvCapacity, new StringExtractor<Product>() {
        @Override
        public String getStringValue(Product item, int position) {
            return "Capacity: " + item.Capacity;
        }
    });
    FunDapter<Product> adapter = new FunDapter<>(
            HomeActivity.this, productList, R.layout.layout_list, dict);
    lvProduct = (ListView)findViewById(R.id.lvProduct);
    lvProduct.setAdapter(adapter);
    lvProduct.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Product selectedProduct = productList.get(position);
    Intent in = new Intent(HomeActivity.this, DetailActivity.class);
    in.putExtra("product", (Serializable) selectedProduct);
    startActivity(in);
}
}
 
 
详细活动
 
package com.example.kun.carcarkila;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
public class DetailActivity extends AppCompatActivity {
TextView tvCarModel, tvCarType, tvCapacity;
ImageView ivImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    ImageLoader.getInstance().init(UILConfig.config(DetailActivity.this));
    Product product = (Product) getIntent().getSerializableExtra("product");
    tvCarModel = (TextView)findViewById(R.id.tvCarModel);
    tvCarType = (TextView)findViewById(R.id.tvCarType);
    tvCapacity = (TextView)findViewById(R.id.tvCapacity);
    ivImage = (ImageView)findViewById(R.id.ivImage);
    if(product != null){
        tvCarModel.setText(product.Car_Model);
        tvCarType.setText(product.Car_Type);
        tvCapacity.setText(product.Capacity);
        ImageLoader.getInstance().displayImage(product.img, ivImage);
    }
}
}
 
 
产品类别
 
package com.example.kun.carcarkila;
import com.google.gson.annotations.SerializedName;
public class Product {
@SerializedName("Car_No")
public int Car_No;
@SerializedName("Car_Model")
public String Car_Model;
@SerializedName("Car_Type")
public String Car_Type;
@SerializedName("Capacity")
public int Capacity;
@SerializedName("img")
public String img;
}
错误 是 java.lang.ClassCastException:com.example.kun.carcarkila.Product无法转换为java.io.Serializable
 
 
答:您的当前活动已崩溃,因为您的产品类不可序列化,因此这就是为什么出现最后一个活动(即登录活动)的原因。
 
您需要在Product类上实现Serializable接口。
 
产品类的第一行将如下所示。
 
公共类产品实现Serializable 
上一篇: 在值本身是字典的情况下,如何设置dict [value]使其对应于dict [key]?
下一篇: 在Android中以多点触控计算每个手指下的像素