【问题标题】:Passing value from ListView to another Activity/Class [duplicate]将值从 ListView 传递到另一个 Activity/Class [重复]
【发布时间】:2017-05-20 01:06:46
【问题描述】:

所以这里我有 ListProductActivity.java 类,它根据用户输入的搜索条件显示产品列表,并且使用 Json 从 MySQL 服务器检索数据。我的问题是,当用户从列表视图中选择到另一个活动时,如何将单个值(在这种情况下为 productName)传递给另一个活动,以便我可以在新活动(viewProductActivity.java)中使用该值。

ListProductActivity.java

public class ListProductActivity extends AppCompatActivity {

    private ListView list;
    private ProgressDialog loading;
    ArrayList<HashMap<String, String>> productList;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.display_product);
        list = (ListView) findViewById(R.id.listView);
        productList = new ArrayList<HashMap<String,String>>();
        getData();
    }
    public void getData(){

        String s = getIntent().getStringExtra("productName");

        loading = ProgressDialog.show(this,"Please wait...","Fetching...",false,false);

        String url = Config.DATA_URL2 + s;

        StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                loading.dismiss();
                showList(response);
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(ListProductActivity.this,error.getMessage().toString(),Toast.LENGTH_LONG).show();
                    }
                });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);

    }

    private void showList(String response){

        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray products = jsonObject.getJSONArray(Config.JSON_ARRAY);

            for(int i=0;i<products.length();i++){
                JSONObject productData = products.getJSONObject(i);
                String name = productData.getString(KEY_NAME);
                String price = productData.getString(KEY_PRICE);
                String brand = productData.getString(KEY_BRAND);

                HashMap<String,String> product = new HashMap<String,String>();

                product.put(KEY_NAME,name);
                product.put(KEY_PRICE,price);
                product.put(KEY_BRAND,brand);

                productList.add(product);
            }

            ListAdapter adapter = new SimpleAdapter(
                    ListProductActivity.this, productList, R.layout.list_product,

                    new String[]{KEY_NAME,KEY_PRICE,KEY_BRAND},
                    new int[]{R.id.name, R.id.price, R.id.brand}
            );

            list.setAdapter(adapter);

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

} 

那么,我可以在我的 ListProductActivity 类中实现什么函数来将基于在 listView 中选择的用户的产品名称传递给另一个活动,以及如何在 viewProductActivity 类中接收传递的值?

我真的希望你们可以发布这个函数并简要解释它是如何工作的,这样我就可以很好地理解代码。对代码的评论将更加清晰和有用。谢谢。

编辑

这是列表视图搜索后的结果图片 Click To View Image

【问题讨论】:

  • 您是否尝试通过您的列表视图适配器中的意图传递它
  • @AliAsheer 我不知道怎么做。也许你可以告诉我怎么做?
  • 贴出适配器代码,包括你去新Activity的部分
  • 您可以在您的listView 上设置setOnItemSelectlistner 并获取所选项目的值并将其传递给意图
  • @KenZo Miyazaw 您可以在 Murat K. 发布链接的帖子中找到答案

标签: java android listview


【解决方案1】:

您可以通过列表视图适配器中的 Intent 将其传递为

        Intent i;
        i = new Intent(mContext, viewProductActivity.class);
        i.putExtra("productName",whateverstring);
        mContext.startActivity(i);

【讨论】:

  • 需要把代码放在 itemSelectListner 里面。
  • 然后把同样的代码替换成mContextListProductActivity.this
【解决方案2】:

这样实现,

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      String name = productList.get(position).get(KEY_NAME);
      Intent i;
        i = new Intent(mContext, viewProductActivity.class);
        i.putExtra("productName",name);
        startActivity(i);
  } 
});

【讨论】:

  • 根据我上面的课,我应该把这些代码放在哪里?
  • 放在 onCreate() 上面 getData();
【解决方案3】:

稍后将数组列表传递给新活动,您可以使用额外的任何内容 例如:-

Intent i = new Intent(ctx, SecondActivity.class);

            i.putExtra("List", List); //List is an arraylist like yours

            startActivity(i);

第二个活动:

SList = (ArrayList<HashMap<String,String>>) getIntent().getSerializableExtra("List");

现在使用 SList.get(0).get("keyname") 使用任何你想要的东西

【讨论】:

    【解决方案4】:

    首先在当前activity上简单实现listview的onItemClickListener

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                    String product_name = productList.get(position).get(KEY_NAME); 
                    Intent intent = new Intent(YourCurrentActivity.this,YourNextActivity.class);
                    intent.putExtra("product_name",product_name);
                    startActivity(intent);
                }
            });
    

    并在 YourNextActivity.java 的 onCreate 方法中接收该值,如下所示:

    Bundle bundle = getIntent().getExtras();
    String productname = bundle.getString("product_name");
    

    【讨论】:

    • 根据我上面的课,我应该把这些代码放在哪里?
    • 在 ListProductActivity.java 中写入 setOnItemClickListener 并在 viewProductActivity.java 中接收该值
    • 谢谢你..它正在工作..我接受你的回答是与我的问题最相关的..
    • 快乐编码:)
    【解决方案5】:

    把你的代码放在这里

    private void showList(String response){
    
            try {
                JSONObject jsonObject = new JSONObject(response);
                JSONArray products = jsonObject.getJSONArray(Config.JSON_ARRAY);
    
                for(int i=0;i<products.length();i++){
                    JSONObject productData = products.getJSONObject(i);
                    String name = productData.getString(KEY_NAME);
                    String price = productData.getString(KEY_PRICE);
                    String brand = productData.getString(KEY_BRAND);
    
                    HashMap<String,String> product = new HashMap<String,String>();
    
                    product.put(KEY_NAME,name);
                    product.put(KEY_PRICE,price);
                    product.put(KEY_BRAND,brand);
    
                    productList.add(product);
                }
    
                ListAdapter adapter = new SimpleAdapter(
                        ListProductActivity.this, productList, R.layout.list_product,
    
                        new String[]{KEY_NAME,KEY_PRICE,KEY_BRAND},
                        new int[]{R.id.name, R.id.price, R.id.brand}
                );
    
                list.setAdapter(adapter);
    
               // put your new code here
               list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                    String product_name = productList.get(position).get(KEY_NAME); 
                    Intent intent = new Intent(YourCurrentActivity.this,YourNextActivity.class);
                    intent.putExtra("product_name",product_name);
                    startActivity(intent);
                }
            });
    
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
        }
    

    【讨论】:

    • 谢谢你..你的回答对我的问题很有帮助..
    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 2020-05-12
    • 2017-04-05
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多