2017-01-15 6 views
1

私は非常に基本的なアプリケーションを構築しています:リストを持っていれば、そのリストの項目をクリックすると、クリックされた項目の詳細情報を含む警告ダイアログが表示されます。ListView indexing and SearchView

フィルター検索機能を実装しましたが、問題はありますが、検索バーのテキストを1とし、1から始まるすべての項目を画面に表示すると、1、11、 012,123,139,141,12,13,14,15など

R.layout.11の2番目の項目をクリックすると、R.layout.2が得られます。これは、コードがidを持つリストの2番目の項目として認識するためです== 1で、id == 12の11番目のアイテムではありません。

明らかに、2番目のアイテムだけではなく、フィルタリングされたリストのすべてのアイテムです。誰かがこの問題で私を助けることができますか?どのように解決するか考えていますか? 私はAndroidアプリケーションの開発には非常に新しいです、私はJavaについて少し知っています、私はちょうど学んでいます、あなたの忍耐ありがとう。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.activity_max); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_max); 

    final String[] nameproducts = new String[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; 

    // ArrayList 
    final ArrayList<String> list = new ArrayList<String>(); 
    for (int i = 0; i < nameproducts.length; ++i) { 
     list.add(nameproducts[i]); 

    } 

    final ListView mylist = (ListView) findViewById(R.id.listView1); 

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 

    sv=(SearchView) findViewById(R.id.searchView1); 
    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String text) { 
      return false; 

     } 

     @Override 
     public boolean onQueryTextChange(String text) { 
      adapter.getFilter().filter(text); 
      return false; 

     } 

    }); 

    mylist.setAdapter(adapter); 

    mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> testo, View v, int pos, long id) { 

      if (id == 0) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this); 
       builder.setCancelable(true); 
       LayoutInflater inflater = getLayoutInflater(); 
       View view = inflater.inflate(R.layout.1, null); 
       builder.setView(view); 
       builder.show(); 
      } 

      if (id == 1) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this); 
       builder.setCancelable(true); 
       LayoutInflater inflater = getLayoutInflater(); 
       View view = inflater.inflate(R.layout.2, null); 
       builder.setView(view); 
       builder.show(); 
      } 

      if (id == 2) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this); 
       builder.setCancelable(true); 
       LayoutInflater inflater = getLayoutInflater(); 
       View view = inflater.inflate(R.layout.3, null); 
       builder.setView(view); 
       builder.show(); 
      } 

     } 

    }); 

} 

答えて

0

どの項目のは、IDではなく、クリックした値をチェックする程度。作品:

@Override 
public void onItemClick(AdapterView<?> test, View v, int pos, long id) { 
    String num = test.getItemAtPosition((int)id).toString(); 
    if (num.equalsIgnoreCase("11")) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
     builder.setCancelable(true); 
     LayoutInflater inflater = getLayoutInflater(); 
     View view = inflater.inflate(R.layout.eleven, null); 
     builder.setView(view); 
     builder.show(); 
    } 
    else if (num.equalsIgnoreCase("12")) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
     builder.setCancelable(true); 
     LayoutInflater inflater = getLayoutInflater(); 
     View view = inflater.inflate(R.layout.twelve, null); 
     builder.setView(view); 
     builder.show(); 
    }