2013-08-09 6 views
1

내 활동 중 하나가 각 행의 사용자 지정 숫자 선택기와 함께 목록보기를 필요로합니다. here과 같이 번호 선택 도구를 만들었습니다. 그러나 버튼을 클릭하면 카운터가 증가하거나 감소하지 않습니다.사용자 지정 NumberPicker 단추 .onClickListener

다음은 내 사용자 ListView 어댑터에서 발견 된 코드입니다.

public class MaterialListViewAdapter extends BaseAdapter 
{ 
    ViewHolder holder; 
    int counter = 0; 

    private ArrayList<MaterialClass> data; 

    public static LayoutInflater inflater = null; 

    public static Dialog dialog; 
    String materialName; 

    public MaterialListViewAdapter(Context applicationContext, 
     int materialdialogcontent, ArrayList<MaterialClass> materials) 
    { 
     this.data = materials; 
     inflater = (LayoutInflater)applicationContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 


    @Override 
    public int getCount() 
    { 
     return data.size(); 
    } 

    @Override 
    public Object getItem(int position) 
    { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) 
    { 
     return position; 
    } 

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

     View vi = convertView; 

     //ViewHolder holder = new ViewHolder(); 

     if(vi == null) 
     { 
      holder = new ViewHolder(); 

      vi = inflater.inflate(R.layout.materialdialogcontent, null); 

      //Initialize Buttons and TextViews. 

      holder.num.setText("0"); 

      holder.add.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        counter++; 
        holder.num.setText("" + counter); 
       } 
      }); 

      holder.sub.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        counter--; 
        holder.sub.setText("" + counter); 
       } 
      }); 


      //holder.pk = (NumberPicker)vi.findViewById(R.id.npMaterialAmount); 

      vi.setTag(holder); 
     } 
     else 
     { 
     holder = (ViewHolder)vi.getTag(); 
     } 

     holder.txt.setText(data.get(position).getName()); 
     //holder.pk.setMaxValue(20); 
     //holder.pk.setMinValue(0); 

     return vi; 
    } 

    private class ViewHolder 
    { 
     TextView txt; 
     Button add; 
     Button sub; 
     TextView num; 
     //NumberPicker pk; 
    } 

} 

무슨 일이 일어나고 있는지 디버깅을 시도하면 카운터가 '0'으로 초기화되지 않습니다.

나는 그러나 내가 마지막으로 카운터를 설정해야합니다 그렇게하기 위해, getView() 방법으로 카운터를 초기화 시도하고 또 다른 오류가

The final local variable counter cannot be assigned, since it is defined in an enclosing type.

어떤 제안 말을 나타?

추가 코드를 업데이트 :

public class Material extends Activity 
    { 
    ArrayList<String> materialList; 
    ListView lv; 
    Button btnConfirm; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_material); 

     lv = (ListView)findViewById(R.id.list); 
     btnConfirm = (Button)findViewById(R.id.btnConfirm); 

     materialList = new ArrayList<String>(); 
     Intent i = getIntent(); 

     materialList = i.getStringArrayListExtra("materialList"); 

     if(materialList != null) 
     { 
      Toast t = Toast.makeText(getApplicationContext(), materialList.get(0).toString(), Toast.LENGTH_LONG); 
      t.show(); 
     } 
     else 
     { 
      //FILL HERE LATER 
     } 

     ArrayList<MaterialClass> materials = new ArrayList<MaterialClass>(); 
     for(String temp : materialList) 
     { 
      MaterialClass m = new MaterialClass(); 
      m.setName(temp); 
      materials.add(m); 
     } 

     MaterialListViewAdapter adapter = new MaterialListViewAdapter(getApplicationContext(), R.layout.materialdialogcontent, materials); 
     lv.setAdapter(adapter); 
    } 

} 
+1

ListView에 대해 onItemClickListener를 정의 했습니까? 그렇다면 버튼을 클릭하면 트리거되지 않습니다. – SKK

+0

@Santhosh 아니요. 정의하지 않았습니다. 그것이 그대로 작동해야하지만 그렇지 않습니다. – ClaireG

+0

@Santhosh 게시물을 편집했습니다. 그것이 ListView를 다루는 내 활동입니다. – ClaireG

답변

0

당신은 당신의 listViewonItemClickListener를 구현해야합니다. 어댑터 클래스에서 리스너를 사용하고 있지만 실질적으로 그 숫자는 해당 listView의 항목 일 뿐이므로 onItemClickListener를 정의하지 않은 버튼 (listView 항목)을 조작 할 수 있습니다. 그래서 어댑터 쓰기를 설정 한 후

lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> listView, View item, int position, long id) { 

     // here you are getting position of clicked item 
     }  
} 

UPDATE :

내가 다시 코드를 겪었어요 그리고 내가 찾은이 :

MaterialListViewAdapter adapter = new MaterialListViewAdapter(getApplicationContext(), R.layout.materialdialogcontent, materials); 
:

1.you하면이 라인을 작성

하지만 어댑터에 생성자가 없습니다.

2. BaseAdapter를 확장하면 getView()과 같이 getCount(), getItem(int position)getItemId(int position) 메서드를 재정의해야합니다. 문제가 발생했습니다.

+0

@giga_abih 항목의 위치를 ​​가져올 필요가 없으며 목록 항목을 클릭해야합니다. 목록보기 안에있는 버튼을 클릭하기 만하면됩니다. 내가 제안한대로해야합니까? – ClaireG

+0

내가 말하는 것은 listview 내부의 버튼은 아무 것도 아니지만 목록 뷰의 항목입니다. 이제 해당 항목을 클릭하여 리스너를 구현해야합니다. 또한 사용하는 버튼을 클릭 할 수 있는지 확인하십시오. 버튼 요소 안의 XML에서'android : clickable = "true"' – thegiga

+0

여전히 동일합니다 ... – ClaireG

0

이 시도 :

public class MaterialListViewAdapter extends BaseAdapter 
{ 
    ViewHolder holder; 
    int counter = 0; 

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

     View vi = convertView; 

     //ViewHolder holder = new ViewHolder(); 

     if(vi == null) 
     { 
      holder = new ViewHolder(); 

      vi = inflater.inflate(R.layout.materialdialogcontent, null); 

      //Initialize Buttons and TextViews. 
      //holder.pk = (NumberPicker)vi.findViewById(R.id.npMaterialAmount); 

      vi.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder)vi.getTag(); 
     } 

     holder.txt.setText(data.get(position).getName()); 
     //holder.pk.setMaxValue(20); 
     //holder.pk.setMinValue(0); 

     holder.add.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       counter++; 
       holder.num.setText("" + counter); 
      } 
     }); 

     holder.sub.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       counter--; 
       holder.num.setText("" + counter); 
      } 
     }); 

     return vi; 
    } 

    private class ViewHolder 
    { 
     TextView txt; 
     Button add; 
     Button sub; 
     TextView num; 
     //NumberPicker pk; 
    } 

} 
+0

이미 시도했습니다 ... 작동하지 않았습니다. – ClaireG