2014-09-11 2 views
1

AutoCompleteTextView에 대한 setOnItemClickListener가 있으며 onItemClick에서 선택한 값을 기반으로 일어날 일을 구현했습니다. 프로그램은 선택된 항목의 색인 값 (이 경우 "int arg2")을보고이를 수행합니다. 디버깅하는 동안 볼 때 INT의 ARG2의 값이 항상 0입니다 -OnItemClickListener가 클릭 된 항목의 인덱스를 제공하지 않습니다.

여기에 코드

mCommCode = (AutoCompleteTextView) findViewById(R.id.CommCode); 
ArrayAdapter<String> mArrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, CommodityCode); 

    mCommCode.setAdapter(mArrayAdapter); 

    mCommCode.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 

       double finalCommodityValue = 0; 
       double argument = ((double)arg2); 

       if(argument < 26){ 

       finalCommodityValue = argument + 1.00; 

       } 

유일한 문제가 있습니다. 클릭 한 항목과 onItemClick에 전달 된 항목 사이에 연결이 끊어지는 것 같습니다.

알아내는 방법에 대한 의견이 있으십니까?

당신은 finalCommodityValue을 재정의 :

답변

0

내가 ARG2가 0 인의 문제는 사용중인 뷰 객체 (mCommCode) 때문에 선택하는 다른 항목이 없다는 생각은 목록을 보유 할 수없는 텍스트 뷰입니다 선택할 개별 항목 수 이 역할은 listView 객체를 사용하여 수행됩니다. 나는 당신이 데이터 소스를 부착하기위한 목록보기를 사용하기로 결정한다면이 사람이 당신의 걱정을 해결할 수 있습니다 생각 :

mCommCode.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
        long id) { 
       double finalCommodityValue = 0; 
      double argument = ((double) position); 

      if(argument < 26){ 

      finalCommodityValue = argument + 1.00; 
      } 
     }); 

당신은이 권리를 얻기 위해리스트 뷰 객체를 사용합니다.

+0

나는 다른 옵션이 없다고 생각한다 !! 나는 이것을 피하려고 노력했다. 어쨌든, 내가 그걸로 가자. 감사. – RmK

0

코드에서 오류가있을 수 있습니다 당신은 함수 내에서 같은 이름의 두 개 이상의 변수를 가질 수 없기 때문에 컴파일 오류가

finalCommodityValue = 0; 
if(argument < 26){ 

    double finalCommodityValue = argument + 1.00; 

} 

.

변수 finalCommodityValue이 여기에 표시된 코드를 포함하는 함수 외부에 정의 된 경우 여기에 shadowing입니다. 즉, if (argument < 26) 문 내의 finalCommodityValue은 전체 기능 외부에서 정의한 finalCommodityValue과 다릅니다. 어떤 의미에서는 함수 외부에 정의 된 값을 숨기는 것입니다.

또한 if 문 내부에 변수를 만들면 if 문 ({} 사이)의 범위 내에서만 존재하게됩니다. 코드에서 아무 것도 사용하지 않습니다.

코드 실행 방법을 디버깅 할 수 있으므로 컴파일 오류가 없다고 가정합니다. 이는 finalCommodityValue이 클래스 필드로 정의되었음을 의미합니다.

finalCommodityValue = 0; 
if(argument < 26){ 

    finalCommodityValue = argument + 1.00; 

} 

지금, 당신의 함수와 if 문 내의 finalCommodityValue이 클래스에 전역으로 정의 같은 finalCommodityValue에 해당

: 따라서, 당신이해야 할 것은 double을 제거합니다.

는 지금까지 arg2 항상 0 왜, 내가 믿는대로 문제는 : 당신은 AutoCompleteTextViewOnItemClickListener를 사용하는

mCommCode = (AutoCompleteTextView) findViewById(R.id.CommCode); 

. AutoCompleteTextView은 TextView이므로 항목이 하나뿐입니다. 그래서 항상 포지션 0을 얻고 있습니다. 대신 ListView을 사용해야합니다.또한,

<AutoCompleteTextView 
    android:id="@+id/tvAutocomplete" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="15" 
    android:hint="@string/search_hint" > 

    <requestFocus /> 
</AutoCompleteTextView> 

<ListView 
    android:id="@+id/lvDataList" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="85" > 
</ListView> 

클래스 변수 생성 : 당신이 XML 파일에서

이 같은이 있어야에서 다음

searchList = (ListView) findViewById(R.id.lvDataList); 

:

ListView searchList; 

그리고 onCreate()의를 함수에 여기에 표시된 코드가 포함되어 있으면 OnItemClickListenerListView하지 AutoCompleteTextView 온 :

searchList.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> adapter, View view, int position, 
       long id) { 

      Log.d("POSITION", position); 

      // .. Rest of your code 

     } 

    }); 
+0

오류를 지적 해 주셔서 감사합니다. 내 질문을 편집했습니다. int arg2 값을받은 이유에 대한 생각은 내가 선택한 것에 상관없이 0입니까? – RmK

+0

arg2가 0인지 어떻게 알 수 있습니까? 어떻게 테스트 했습니까? 중단 점을 넣고 디버깅 했습니까? 달성하려는 코드는 무엇입니까? – nem035

+0

질문에 대답 할 때 시간과 세부 사항을 알려 주셔서 감사합니다. 그러나 두 가지를 지적하겠습니다. 1. 최종 선택 값은 onClickListener가 완료되면 사용이 없으므로 전역으로 선언하지 않았습니다. . 2. AutoCompleteTextView를 사용하는 이유가 있습니다. 목록보기를 사용하여 해결할 수 없다고 생각합니다. (여기에서 사용 사례는 EditText와 같습니다. 입력 할 때 제안이 필요합니다.) – RmK

관련 문제