0

사용자 지정 어댑터가있는 ListView가 있습니다. 목록의 각 행에는 3 개의 텍스트 필드와 회 전자가 있습니다. 사용자가 회 전자 항목을 선택하면 관련 데이터를 텍스트 뷰에서 가져와야합니다. 다음과 같이 listView를 상상해보십시오 : | texView | textView | textView | Spinner | 회 전자 열에서 무언가를 선택할 때 3 개의 텍스트보기 데이터를 가져와야합니다. 그러나 나는 이것을 성취 할 수 없다.TextView 및 스피너가 데이터를 가져올 수없는 사용자 지정 어댑터가있는 ListView

나는이 작업을하는 방법에 대해 미쳐 가고있다. 다음은 CustomAdapter 코드입니다.

private class ViewHolder { 

    Spinner rateSpinner; 
    TextView pView; 
    TextView nView; 
    TextView cView; 

} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

ViewHolder holder = null; 


if (convertView == null) { 
    LayoutInflater vi =  
      (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView = vi.inflate(R.layout.todolist_item, null); 

    holder = new ViewHolder(); 
    holder.pView = (TextView)convertView.findViewById(R.id.r1); 
    holder.nView = (TextView)convertView.findViewById(R.id.r2); 
    holder.cView = (TextView)convertView.findViewById(R.id.r3); 
    holder.rateSpinner = (Spinner)convertView.findViewById(R.id.spinner2); 


    convertView.setTag(holder); 

    holder.rateSpinner.setOnItemSelectedListener(
     new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
       Object item = parent.getItemAtPosition(pos); 


       selectedRating = item.toString(); 

       Log.v("Chosen rating from spinner", selectedRating); //<-this works correctly 

       Log.v("**********************","**");// <------- Problem: Need to get list view's textview entries with the associated spinner. But its just not working. Always printing the same wrong textview data 

       Log.v("Order Name",item._nText); 
       Log.v("Order Count",item._cText); 
       Log.v("Order Price",item._pText); 

       Log.v("**********************","**"); 

      } 
      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     } 
    ); 


    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.rateSpinner = (Spinner)convertView.findViewById(R.id.spinner2); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(c, 
        android.R.layout.simple_spinner_item, list); 
    holder.rateSpinner.setAdapter(adapter); 
    fItem item = getItem(position); 



    holder.pView.setText(item._pText); 
    holder.nView.setText(item._nText); 
    holder.cView.setText(item._cText); 


    return convertView; 

} 

목록의 textView는 데이터베이스에서 먼저로드됩니다. 그런 다음 사용자는 회 전자에서 등급을 선택하도록 요청받습니다. 사용자가 등급을 선택하고 나면 관련 textView 항목을 찾아야하며이 행 데이터를 가져 오는 방법을 이해할 수 없습니다. 회 전자의 onItemSelectedListener()에서 Print 문을 참조하십시오.

정말 알아 주셔서 감사합니다.

+0

이 명확하게하기 위해 어댑터에이를 시도해보십시오 Log.v이 라인'holder.personSpinner =을 넣어 전체 목록 – user2511030

+0

의 모든 회 다시하고 다시 같은 텍스트 뷰 항목을 인쇄 (Spinner) convertView.findViewById (R.id.spinner2);'IF –

+1

당신이 UI를 가지고 있다고 말할 때 코드에 두 개의 스피너가 보인다 : | textView | textView | textView | Spinner .. * holder.personSpinner와 holder.rateSpinner는 무엇입니까? * –

답변

0

스피너 용 어댑터를 만들면 주어진 코드에서 찾을 수없는 목록을 전달합니다.

목록이 항상 동일하므로 모든 회 전자마다 동일한 항목이 표시 될 수 있습니까?

+0

UI는 다음과 같습니다. | textView | textView | textView | 스피너. 사용자가 회 전자를 설정 한 후 3 개의 텍스트 뷰에서 값을 가져 오려고합니다. 각 textView에는 고유 한 텍스트가 있습니다. 이 코드는 선택한 스피너 항목을 명확하게 인쇄합니다. 그러나 그것은 스피너의 onItemSelectedListener 안에있는 각 행에 대해 정확한 textView 데이터를 제공하지 않습니다. – user2511030

0

단지

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
ViewHolder holder = new ViewHolder(); 
View vi = convertView; 

if (vi == null) { 
    vi = getContext().getLayoutInflater().inflate(R.layout.todolist_item, null); 
    holder.pView = (TextView)vi.findViewById(R.id.r1); 
    holder.nView = (TextView)vi.findViewById(R.id.r2); 
    holder.cView = (TextView)vi.findViewById(R.id.r3); 
    holder.rateSpinner = (Spinner)vi.findViewById(R.id.spinner2); 
    holder.personSpinner = (Spinner)vi.findViewById(R.id.spinner2); 
    vi.setTag(holder); 
} 
else { 
    holder = (ViewHolder) vi.getTag(); 
} 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(c, 
       android.R.layout.simple_spinner_item, list); 
holder.rateSpinner.setAdapter(adapter); 
fItem item = getItem(position); 

holder.pView.setText(item._pText); 
holder.nView.setText(item._nText); 
holder.cView.setText(item._cText); 

return vi; 
} 
+0

wanz : 여기에 불평하고 있습니다. 이 뷰 또는 LayoutInflater해야합니까? vi = getContext(). getLayoutInflater(). inflate (R.layout.todolist_item, null); 이 오류는 getLayoutInflater() 메서드가 정의되어 있지 않음을 나타냅니다. – user2511030

+0

Wanz : 올바른 데이터 행이있는 목록 뷰를 그리는 어댑터에는 문제가 없습니다.내 문제는 회 전자의 onClickSelectedItem 수신기 안에 textView 데이터를 인쇄하는 방법입니다. – user2511030

+0

코드를 지우고 else (holder = (ViewHolder) vi.getTag();} 다음에 onClickSelectedItem 수신기를 넣으려고합니다. – wanz

관련 문제