我正在使用列表视图进行搜索,如何在列表视图中获取所选项目位置?

时间:2017-04-12 05:27:44

标签: android listview

这里我使用两个数组来获取每个所选项目的项目ID,但我没有在列表视图中获得项目的正确位置。 如果我搜索并选择一个项目即:" MacBook Air"搜索结果显示项目在第一个位置,我得到位置= 1,但实际上我需要位置= 9。 如何获得数组项的正确位置?

public class MainActivity extends AppCompatActivity {

ListView lv;
EditText acc_no;
ArrayAdapter arrayAdapter;
String products[] = {"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE",
        "iPhone 4S", "Samsung Galaxy Note 800",
        "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};
String productid[]={"12","45","95","18","45","77","66","11","74","33","44"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    JSONParser jsonParser = new JSONParser();
    lv = (ListView) findViewById(R.id.list_view);
    acc_no = (EditText) findViewById(R.id.acc_no_editText);
    arrayAdapter = new ArrayAdapter(getBaseContext(), R.layout.list_item, products);
    lv.setAdapter(arrayAdapter);
    lv.setVisibility(GONE);
    acc_no.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            lv.setVisibility(GONE);
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(acc_no.getText().toString().trim().equals("")){
                lv.setVisibility(GONE);
            }else{
                lv.setVisibility(View.VISIBLE);
                MainActivity.this.arrayAdapter.getFilter().filter(s);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            acc_no.setText(lv.getItemAtPosition(position).toString());
            Toast.makeText(MainActivity.this, productid[position], Toast.LENGTH_SHORT).show();
            lv.setVisibility(GONE);
        }
    });
}

3 个答案:

答案 0 :(得分:1)

伙计们我解决了我的问题.. 谢谢所有......谁试图帮助我.. :)。

我使用了一个功能

public int indexOfString(String searchString, String[] domain)
{
    int i;
    for(i = 0; i < domain.length; i++)
        if(searchString.equals(domain[i])){
            return i;
        }
    return -1;
}

products[]返回正确的字符串项位置,并使用该位置从productId[]获得相应的项目。

 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String item=lv.getItemAtPosition(position).toString();
            acc_no.setText(item);
            int ArrayPosition=indexOfString(item,products);
            Toast.makeText(MainActivity.this, productid[ArrayPosition], Toast.LENGTH_SHORT).show();
            lv.setVisibility(GONE);
        }
    });
}
public int indexOfString(String searchString, String[] domain)
{
    int i;
    for(i = 0; i < domain.length; i++)
        if(searchString.equals(domain[i])){
            return i;
        }
    return -1;
}

答案 1 :(得分:0)

尝试这个你应该使用数组适配器获取项目,因为列表视图从搜索开始填充,所以使用适配器, 在你的lv.setonItemClick

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        acc_no.setText(arrayadapter.getItemAtPosition(position).toString());
    }
});

尝试并评论您的问题是否已解决

答案 2 :(得分:0)

您可以将两个数组存储为字典,如下所示 HashMap<String, Integer> productIdPairs 并在点击某个项目时快速productIdPairs.get()