2014-09-05 5 views
0

목록에있는 각 행의 라디오 버튼에서 클릭시 이벤트를 제공하고 싶은 목록이 있습니다. 그러나이 코드는 작동하지 않습니다. 힘을 가깝게 피하십시오. 누구든지 나를 도울 수 있습니다. 나는 이걸 처음 보았습니다. 의 getView에radioclock에서 onclick 이벤트가 작동하지 않습니다.

package com.example.radiogroup; 


    import java.util.ArrayList; 
    import java.util.HashMap; 

    import android.support.v7.app.ActionBarActivity; 
    import android.support.v7.app.ActionBar; 
    import android.support.v4.app.Fragment; 
    import android.app.Activity; 
    import android.content.Context; 
    import android.database.DataSetObserver; 
    import android.os.Bundle; 
    import android.view.LayoutInflater; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.view.ViewGroup; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemClickListener; 
    import android.widget.BaseAdapter; 
    import android.widget.Checkable; 
    import android.widget.ImageView; 
    import android.widget.ListAdapter; 
    import android.widget.ListView; 
    import android.widget.RadioButton; 
    import android.widget.TextView; 
    import android.widget.Toast; 
    import android.os.Build; 

    public class MainActivity extends Activity implements Checkable 
{ 

    private ArrayList<HashMap<String,Object>> data; 
    private ListAdapter adapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ListView lv=(ListView)findViewById(R.id.listView1); 
     lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     data=new ArrayList<HashMap<String, Object>>(); 
     prepareListData(); 
     adapter = new ListAdapter(this,data); 
     lv.setAdapter(adapter); 

    /* lv.setOnItemClickListener(new OnItemClickListener() 
     { 

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

      { 
       if(position==0) 
       { 
        Toast.makeText(getApplicationContext(), "Move forward", 
     Toast.LENGTH_SHORT).show(); 
       } 


      } 
      } 

     }); */ 





    } 
    private void prepareListData() 
    { 
     HashMap<String,Object> row1=new HashMap<String,Object>(); 
     row1.put("ID",1); 
     row1.put("NAME","Taj Mahal"); 
     data.add(row1); 

     HashMap<String,Object> row2=new HashMap<String,Object>(); 
     row2.put("ID",2); 
     row2.put("NAME","Agra Fort"); 
     data.add(row2); 

     HashMap<String,Object> row3=new HashMap<String,Object>(); 
     row3.put("ID",3); 
     row3.put("NAME","Ram Baugh"); 
     data.add(row3); 

     HashMap<String,Object> row4=new HashMap<String,Object>(); 
     row4.put("ID",4); 
     row4.put("NAME","Panch Mahal"); 
     data.add(row4); 

     HashMap<String,Object> row5=new HashMap<String,Object>(); 
     row5.put("ID",5); 
     row5.put("NAME","Musamman Burj"); 
     data.add(row5); 

    } 
    class ListAdapter extends BaseAdapter 
    { 
     private Context context; 
     private ArrayList<HashMap<String,Object>> list; 
     ViewHolder holder; 



     public ListAdapter(Context context,ArrayList<HashMap<String,Object>> list){ 
       this.context = context; 
       this.list = list; 
       holder.rb.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) 
        { 
         Toast.makeText(getApplicationContext(), "Move forward", Toast.LENGTH_SHORT).show(); 

        } 
       }); 
     } 


     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return list.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return list.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 


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

       if(convertView == null){ 
        holder = new ViewHolder(); 
        convertView = LayoutInflater.from(context).inflate(R.layout.row,null,false); 
        holder.rb = (RadioButton) convertView.findViewById(R.id.radioButton1); 

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

       holder.rb.setText(list.get(position).get("NAME").toString()); 

      return convertView; 
     } 
     class ViewHolder 
      { 
       RadioButton rb; 
      } 

    } 
    @Override 
    public void setChecked(boolean checked) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public boolean isChecked() { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    public void toggle() { 
     // TODO Auto-generated method stub 

    } 




} 
+0

'getView()'에'OnClikListener()'를 놓으면 .. – bGorle

+0

먼저 라디오 버튼이 실제로 무엇인지 읽어야합니다. 먼저 라디오 그룹을 구현해야합니다. 리스너 내 어댑터 – kgandroid

+0

응답을 확인합니다. 어댑터 conatracter에서 ans를 제거하고 어댑터에 getview에 추가합니다. –

답변

0

사용은 '당신 CANN 있도록 ViewHolder 개체를 초기화하지 않은

holder.rb.setOnClickListener(new OnClickListener() 
{ 

      @Override 
      public void onClick(View v) 
      { 
       Toast.makeText(getApplicationContext(), "Move forward",  Toast.LENGTH_SHORT).show(); 

      } 
     }); 

ListAdapter 클래스의 생성자에서 OnCreate Methed에

lv.setOnItemClickListener(new OnItemClickListener() 
{ 

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

    { 
     if(position==0) 
     { 
      Toast.makeText(getApplicationContext(), "Move forward "+position, Toast.LENGTH_SHORT).show(); 
     } 
    else 
    if(position==1) 
     { 
      Toast.makeText(getApplicationContext(), "Move forward "+position, 
     Toast.LENGTH_SHORT).show(); 
     } 


    } 
    } 

}); 
+0

지금 일하고 있습니다. 고맙습니다. –

+0

마지막 코드에서 나는 또한이 글을 쓰지 만 r은 이해하지 못했지만 지금은 u r을 이해한다 –

+0

나는 이것에 대해 처음이다. 내가 각 행에 다른 이벤트를주고 싶다면 그 위치를 어디에서 설정해야합니까? –

0

그것을 사용하여 어댑터에 Methed 그 클래스의 액세스 멤버. ListAdapter 생성자에서

holder.rb.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) 
       { 
        Toast.makeText(getApplicationContext(), "Move forward", Toast.LENGTH_SHORT).show(); 

       } 
      }); 

를 제거하고 클래스와 멤버 초기화 후 의 getView()에 넣어.

의 getView 방법에서

if(convertView == null){ 
       holder = new ViewHolder(); 
       convertView = LayoutInflater.from(context).inflate(R.layout.row,null,false); 
       holder.rb = (RadioButton) convertView.findViewById(R.id.radioButton1); 

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

후.

관련 문제