2017-04-12 13 views
0

ここでは、2つの配列を使用して各選択項目の項目IDを取得していますが、リスト表示で項目の正しい位置を取得できませんでした。 アイテムを検索して選択すると、「MacBook Air」の検索結果でアイテムが最初の位置に表示され、位置= 1が表示されますが、実際には位置= 9が必要です。 配列アイテムの正しい位置を取得する方法は?リストビューを検索目的に使用していますが、リストビューで選択したアイテムの位置を取得する方法はありますか?

あなたlv.setonItemClickで
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

私は私の問題を解決しました。ありがとうすべて..私を助けようとした人.. :)。

iが

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.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()を行うことができます。

関連する問題