2014-09-05 56 views
0

我有一个列表,我想在列表中的每一行的单选按钮上点击事件。但是这段代码不工作。请给我力量关闭。请任何人帮我。我是新来的。onclick radioButton不能正常工作

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 2014-09-05 10:03:37

+0

首先,您应该阅读一个单选按钮实际是什么。您必须先实现一个单选按钮。然后,您必须设置单击监听器内的适配器 – kgandroid 2014-09-05 10:04:16

+0

检查答案ans从适配器conatracter中删除,并将其添加到适配器上的getview methed – 2014-09-05 10:08:10

回答

0

使用它getview基法上的适配器

holder.rb.setOnClickListener(new OnClickListener() 
{ 

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

      } 
     }); 

使用它的OnCreate基法

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

它现在工作。谢谢纳文。 – 2014-09-05 10:14:26

+0

在最后的代码我也写这个,但你不明白,但现在你明白 – 2014-09-05 10:15:40

+0

我是新来的,所以。还有一件事我想给每行不同的事件,所以我应该在哪里设置它的位置。 – 2014-09-05 10:19:51

0

ListAdapter类的构造函数你还没有初始化ViewHolder对象,所以你卡恩”该类访问成员。 从ListAdapter构造除去

holder.rb.setOnClickListener(new OnClickListener() { 

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

       } 
      }); 

并把它放在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(); 
      } 
在getView方法