【问题标题】:android ListView pass hidden values from one Activity to anotherandroid ListView 将隐藏值从一个 Activity 传递到另一个
【发布时间】:2016-01-18 13:29:00
【问题描述】:

我有一个使用 ArrayAdapter 创建的 ListView,它使用 JSON 解析从 MySQL 数据库获取不同的值。现在,当用户单击列表中的项目时,我将其中一些值传递给下一个活动:

@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id)
{
    Intent intent = new Intent(ListActivity.this, ListingDescription.class);

    String place_name = ((TextView) v.findViewById(R.id.textView3)).getText().toString();

    intent.putExtra("place_name",place_name);
    startActivity(intent);

这很好,但现在我想从 MySQL 数据库中获取另外 2 个不应该显示在 ListView 中的值。我应该走哪条路? 我尝试在 ArrayAdapter 中添加值,但后来我意识到我正在通过获取 textview 信息来传递值。如何在不显示在 ListView 中的情况下从 ArrayList 适配器传递一些信息? 也许有其他方法可以做到这一点?

这就是我解析 JSON 的方式:

for (int i=0; i<theJson.length(); i++){
    Places place = new Places();
    JSONObject jRealObject = theJson.getJSONObject(i);

    place.setImage(jRealObject.getString("image"));
    place.setName(jRealObject.getString("name"));
    place.setLocation_address(jRealObject.getString("location_address"));
    place.setOpen_until(jRealObject.getString("open_until"));

    placeslist.add(place);

我也考虑过在布局中将值设置为不可见,但我认为这绝对不是要走的路。如有任何帮助,我将不胜感激!

【问题讨论】:

    标签: android mysql json listview android-listview


    【解决方案1】:

    在 Places 中创建一个 getter 方法,因为您已经拥有 setter 方法。

    列出地点列表 = 新的 ArrayList();

    将地点列表添加到您的适配器。

    OnItemClick。

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String image = adapter.getItem(position).getImage();
        String name= adapter.getItem(position).getName();
     //use these in intents
    }
    

    编辑

       final CustomAdapter adapter = new CustomAdapter(this, R.layout.activity_list_view, placeslist );
            ListView listView = (ListView) findViewById(R.id.radioGroup);
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String image = adapter.getItem(position).getImage();
                    String name= adapter.getItem(position).getName();
                }
            });
        }
    

    【讨论】:

    • 在这段代码中,你把adapter.getItem(position)放在哪里,你的意思是parent.getItem吗?如果我将这两个值传递给适配器,即使它们不会显示在列表视图中,我也可以使用 getItem 检索它们?还有,position是指适配器在listview中的位置还是数组中item的位置?
    • adapter 是自定义适配器变量,它与您的活动中的项目一起传递给 CustomAdapter 类。
    • position为被点击的item位置(onItemCLick传入)
    • 好的,我知道这与我已经对我传递的所有值所做的非常相似。我遇到的问题是我有 2 个值,它们不会显示在列表视图中,因此,我现在没有它们在适配器中。所以我的第一个问题是,即使我没有在列表视图中显示它们,我可以将值传递给适配器吗?我认为我不能,所以当我解析 JSON 数据时,我应该创建一个单独的列表,其中只包含我不会在屏幕上显示但需要传递给下一个活动的值?
    • 如果您不需要在屏幕上显示也可以像它的位置一样显示在您的数据适配器中。它比拥有两个列表值更好。
    【解决方案2】:

    使用setTag(Object o)getTag() 方法最简单的方法。

    程序

    1. 在适配器内部实现getView() 方法时将对象设置为视图。

    2. 然后OnItemClicked 调用getTag() 并手动将其转换为您为数据定义的类。

    3. 在调用startActivity(Intent i)之前将数据传递给您的意图

    【讨论】:

      【解决方案3】:

      您可以通过 intent 传递 Places 对象。

      intent.putExtra("some_name",adapter.getItem(position).get(position).toString());
      

      在另一个Activity

      JSONObject obj = new JSONObject(getIntent().getStringExtra("some_name"));
      

      【讨论】:

        猜你喜欢
        • 2017-05-20
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 2018-12-25
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        相关资源
        最近更新 更多