2017-04-12 78 views
0

這裏我使用兩個數組來獲取每個選定項目的項目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

使用ACC_NO或任何其他所需領域 –

+0

搜索在原來的列表中選擇的項目,我沒有得到你抱歉.. – BraveHeart

+0

你將有您從中篩選您記錄的原始列表。因此,從您在列表上選定的位置單擊搜索主列表中選定的項目,從您選擇的項目中搜索參數,就像現在您有'acc_no'。 –

回答

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[]正確的字符串項目的位置,並使用該位置i從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; 
} 
+0

很高興你自己嘗試過。 –

+0

謝謝..! :) – BraveHeart

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()); 
    } 
}); 

嘗試後和評論做了你問題解決與否

+0

實際上我需要相應選定項目的「productid [position]」。如果列表視圖從開始填充然後,是否有任何方法來獲取陣列適配器中項目的正確位置? – BraveHeart

+0

它從開始填充,但沒有更新。 –

+0

您是否試過該代碼? –

0

你可以在兩個數組作爲字典存儲爲 HashMap<String, Integer> productIdPairs ,做一個快速的productIdPairs.get()當你點擊一個項目。