单选按钮取消选择在自定义列表视图滚动

问题描述:

取消选择在自定义列表视图滚动单选按钮 我已经定制列表视图是添加 运行时间单选按钮添加autimatically 但取消对滚动单选按钮取消选择在自定义列表视图滚动

我的代码如下适配器给出mainclass和活动文件

版式文件

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:background="@drawable/gradient11" 
       android:layout_width="match_parent" android:layout_height="wrap_content"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <RadioGroup 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <RadioButton 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="option one is selected now so you can" 
       android:textColor="#00ff00" 
       android:id="@+id/op1"/> 

      <RadioButton 
       android:checked="true" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="op2" 
       android:textColor="#00ff00" 
       android:id="@+id/op2"/> 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="op3" 
       android:textColor="#00ff00" 
       android:id="@+id/op3"/> 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="op4" 
       android:textColor="#00ff00" 
       android:id="@+id/op4"/> 

     </RadioGroup> 

    </LinearLayout> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/quest" 
     android:textColor="#e2000000"/> 

</LinearLayout> 

的适配器文件

package com.patel.ravin.com.domparsing; 

    import android.content.Context; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.BaseAdapter; 
    import android.widget.RadioButton; 
    import android.widget.TextView; 

    import java.util.ArrayList; 

    /** 
    * Created by lenovo on 08-08-2016. 
    */ 
    public class Adpt extends BaseAdapter 
    { 
     Context context; 
     ArrayList<MyBean> arrayList; 

     public Adpt(Context context,ArrayList<MyBean> arrayList) 
     { 
      this.context=context; 
      this.arrayList=arrayList; 
     } 
     @Override 
     public int getCount() { 
      return arrayList.size(); 
     } 

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

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

     @Override 
     public View getView(int i, View view, ViewGroup parent) { 

      LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = layoutInflater.inflate(R.layout.listview, null); 

      TextView txtFName = (TextView) view.findViewById(R.id.qid); 
      TextView txtLName = (TextView) view.findViewById(R.id.quest); 
      RadioButton op1=(RadioButton)view.findViewById(R.id.op1); 
      RadioButton op2=(RadioButton)view.findViewById(R.id.op2); 
      RadioButton op3=(RadioButton)view.findViewById(R.id.op3); 
      RadioButton op4=(RadioButton)view.findViewById(R.id.op4); 


      MyBean myBean = arrayList.get(i); 
      txtFName.setText("" + myBean.getQid()); 
      txtLName.setText(" Answer= " + myBean.getQname()); 
      op1.setText(myBean.getOp1()); 
      op2.setText(myBean.getOp2()); 
      op3.setText(myBean.getOp3()); 
      op4.setText(myBean.getOp4()); 

      return view; 
     } 
    } 

活动文件

package com.patel.ravin.com.domparsing; 

    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.widget.ArrayAdapter; 
    import android.widget.ListView; 
    import android.widget.Spinner; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    import com.patel.ravin.com.domparsing.AsyncTask.AsyncTaskLoader; 
    import com.patel.ravin.com.domparsing.AsyncTask.OnAsyncResult; 

    import org.json.JSONArray; 
    import org.json.JSONException; 
    import org.json.JSONObject; 

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

    public class MainActivity extends AppCompatActivity { 

     TextView textView; 
     ListView listView1; 
     Adpt adpt; 

     ArrayList<MyBean> arrayList=null; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      // textView= (TextView) findViewById(R.id.tv1); 
      listView1=(ListView)findViewById(R.id.llv); 

    //  Adpt adpt=new Adpt(getApplicationContext(),arrayList); 


      //listView.setAdapter(new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,arrayList)); 
      OnAsyncResult onAsyncResult=new OnAsyncResult() { 
       @Override 
       public void onAsyncResult(String result) { 

        Log.e("h", result.toString()); 

        try { 
         // textView.setText(""+result.toString()); 
        // String co=result.toString(); 

         JSONArray jsonArray=new JSONArray(result); 
         MyBean myBean; 
         arrayList = new ArrayList<>(); 

         for(int i=1;i<=jsonArray.length();i++) 
         { 
          JSONObject jsonObject=jsonArray.getJSONObject(i); 


          myBean = new MyBean(); 
          myBean.setQid(jsonObject.getString("que")); 
          myBean.setQname(jsonObject.getString("ans")); 

          myBean.setOp1(jsonObject.getString("a")); 
          myBean.setOp2(jsonObject.getString("b")); 
          myBean.setOp3(jsonObject.getString("c")); 
          myBean.setOp4(jsonObject.getString("d")); 

          arrayList.add(myBean); 
          listView1.setAdapter(new Adpt(getApplicationContext(),arrayList)); 
         } 
         //JSONObject object = new JSONObject(result); 

         //String contact = object.getString("que"); 



         // textView.setText(co); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 


       } 
      }; 

      AsyncTaskLoader asyncTaskLoader=new AsyncTaskLoader(MainActivity.this,onAsyncResult,null,"http://quiz/jsonapi.php"); 
      asyncTaskLoader.execute(); 


     } 


    } 

单选按钮取消选择在自定义列表视图滚动 我已经定制列表视图是添加 运行时间单选按钮添加autimatically 但取消对滚动

+0

保持单选按钮布尔值........... – sushildlh

这是Android中使用Listviews和Radio按钮的一个非常常见的问题。

首先,我建议你检查这个帖子: Using radio button in custom listview in Android

现在,我要告诉你哪种解决方案适合我。在我的情况下,我使用GridView,但它也适用于ListView。

在适配器中的类,你必须有所选项目和可变他的指数,它可能是这样的:

private int mSelectedPosition = -1; 
private RadioButton mSelectedRB; 

然后,定义一个函数来获取这样的信息:

public int getItemSelected(){ 
    return mSelectedPosition; 
} 

现在,为了使它正常工作,您必须使用ViewHolder(在我的情况下,GridView中的每个项目都有一个图像和一个RadioButton),因此您也可以在Adapter类中定义ViewHolder:

private class ViewHolder { 
    ImageView image; 
    RadioButton radio; 
} 

然后,在您的getView函数中,您必须使用ViewHolder。在代码中,我写下了需要遵循的评论。

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = convertView; // assign the view 
    ViewHolder holder; // declare the ViewHolder 

    if(view == null){ 
     // cutom layout for each row (item) of the ListView 
     view = mLayoutInflater.inflate(R.layout.item_list_company, parent, false); 
     holder = new ViewHolder(); 

     // initialize the ViewHolder's field 
     holder.image = (ImageView) view.findViewById(R.id.c1); 
     holder.radio = (RadioButton)view.findViewById(R.id.cN1); 

     view.setTag(holder); // set the tag 
    }else{ // already initialized 
     holder = (ViewHolder)view.getTag(); // so we only set the tag 
    } 

    // on click triggered for each RadioButton in the ListView 
    holder.radio.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      if(position != mSelectedPosition && mSelectedRB != null){ 
       mSelectedRB.setChecked(false); // uncheck the last one 
      } 

      mSelectedPosition = position; // change the item selected index 
      mSelectedRB = (RadioButton)v; // assign the new item selected 
     } 
    }); 

    // just to control the right item checked 
    if(mSelectedPosition != position){ 
     holder.radio.setChecked(false); 
    }else{ 
     holder.radio.setChecked(true); 
     if(mSelectedRB != null && holder.radio != mSelectedRB){ 
      mSelectedRB = holder.radio; 
     } 
    } 

    return view; 
} 

最后,在自定义布局(item_list_company.xml在我的情况)在ListView中的每个项目,我有以下代码:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:orientation="vertical" 
    android:layout_height="match_parent"> 
    <ImageView android:id="@+id/c1" 
     android:layout_width="wrap_content" 
     android:layout_height="100dp" 
     android:layout_gravity="center" 
     android:scaleType="centerInside" /> 
    <RadioButton 
     android:id="@+id/cN1" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:buttonTint="@color/colorPrimary" 
     android:textColor="@color/colorAccent" 
     android:focusable="false" 
     android:layout_gravity="left" 
     android:clickable="false" 
     android:focusableInTouchMode="false" 
     android:textSize="20dp"/> 
</LinearLayout> 

特别注意对于这个三个属性RadioButton:

android:focusable="false" 
android:clickable="false" 
android:focusableInTouchMode="false" 

所以,所有这一切,你只需要在你的Activity中设置你的适配器和ListView并调用右键功能来检索选定的项目:

ArrayList<MyBean> arrayList = new ArrayList<>(); 
ListView listView1 = (ListView)findViewById(R.id.llv); 
Adpt adpt = new Adpt(getApplicationContext(), arrayList); 

// add data to the ArrayList 

adpt.notifyDataSetChanged(); // notify for the new data in the ArrayList 

// retrieve the item selected 
int selected = adpt.getItemSelected(); 

希望它有帮助!