这里我使用两个数组来获取每个所选项目的项目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);
}
});
}
答案 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()
。