如何从列表视图中保存选择 ID

Posted

技术标签:

【中文标题】如何从列表视图中保存选择 ID【英文标题】:How to save selection id's from listview 【发布时间】:2015-10-20 18:53:41 【问题描述】:

我有一个包含提交按钮和多选列表视图的活动,我用字符串数组填充了该列表视图,该数组以英语和法语存在。

字符串.xml

    <string-array name="trucks">
       <item name="truck1">Mini-van</item>
       <item name="truck2">Pick-up</item>
       <item name="truck3">4 x 4</item>
    </string-array>

strings_fr.xml

    <string-array name="trucks">
       <item name="truck1">Mini-van french</item>
       <item name="truck2">Pick-up french</item>
       <item name="truck3">4 x 4 french</item>
    </string-array>

一旦用户选择了他/她想要的任何项目,他们点击一个按钮来保存选择(本地到数组)。我能够获取所选项目的字符串内容,但如果我保存这些内容,那么它将保存语言特定的值。我需要的是要保存的名称或某种 ID(卡车 1、卡车 2),以便下次加载列表时,无论语言如何,我都可以务实地检查已保存的列表项,并将车辆 ID 发送到服务器当需要永久保存数据时。

以下是我目前所拥有的..

activity_truck_picker.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_ >

<Button
    android:id="@+id/btn_truck_done"
    android:layout_
    android:layout_
    style="@style/themedButton"
    android:layout_alignParentBottom="true"
    android:text="Add Truck(s)" />

<ListView
    android:id="@+id/lst_trucks"
    android:layout_
    android:layout_
    android:layout_above="@id/btn_truck_done"
    android:layout_alignParentTop="true"
    />

</RelativeLayout>

TruckPickerActivity.java

import android.app.Activity;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import java.util.ArrayList;


public class TruckPickerActivity extends Activity implements
        View.OnClickListener 

    private static final String TAG = "Presite";

    Button button;
    ListView listView;
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_truck_picker);

        listView = (ListView) findViewById(R.id.lst_trucks);
        button = (Button) findViewById(R.id.btn_truck_done);

        String[] trucks = getResources().getStringArray(R.array.trucks);
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, trucks);
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        listView.setAdapter(adapter);

        button.setOnClickListener(this);
    

    public void onClick(View v) 
        SparseBooleanArray checked = listView.getCheckedItemPositions();
        ArrayList<String> selectedItems = new ArrayList<String>();
        for (int i = 0; i < checked.size(); i++) 
            int position = checked.keyAt(i);
            if (checked.valueAt(i))
                selectedItems.add(adapter.getItem(position));
        

        String[] outputStrArr = new String[selectedItems.size()];

        for (int i = 0; i < selectedItems.size(); i++) 
            outputStrArr[i] = selectedItems.get(i);
            Log.i(TAG, "Truck Selected: " + selectedItems.get(i));

            String itemName = ...; // Some how look up name of string in array for storing in database

        
    

我想不出一种方法来获取所选选项的名称/ID 以进行保存。 任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您可以将onItemClickListener 添加到您的ListView,其中long id 参数是已点击项目的ID:

listView1.setOnItemClickListener(new OnItemClickListener() 
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) 

        //Do something with id parameter

    
);

如果我理解正确,您希望获得在 xml 中声明的字符串数组的 name 属性。我会创建一个包含第一个数组名称的第二个数组,并使用来自onItemClickListener() 的 id 或 position 参数获取名称

【讨论】:

不得不维护另一个数组来做这样的事情似乎有点愚蠢,但它确实有效,谢谢。

以上是关于如何从列表视图中保存选择 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在搜索表视图后使用 indexPath 在主表视图中选择 RowAtIndexPath?

phpmyadmin:从多个表创建的视图现在 id 字段不是唯一的,无法编辑,更新删除

在 qml 如何保存作为列表视图元素的标签文本

如何使用来自另一个视图控制器swift的用户输入创建具有表视图单元格的列表

从 SwiftUI 中的工作表更新列表视图中的行

无法保存数据并从关闭中重新加载表视图