2017-01-16 62 views

回答

0

將你的單選按鈕狀態保存在列表中,或者如果在這種情況下只有一個選擇,則可以將特定位置保存在一個int變量中,並在選擇adapter.notifyDataSetChanged()之後更新所選變量的值。您需要編寫代碼getView以反映更改。

粗糙例如:(我老了現在的ListView(檢查recyclerview),但你的adpater應該是這樣的)

Adapter{ 
int selectedPosition = -1; // initially nothing selected 

getView(..,..., int position){ 

    if(selectedPosition==position){ 
    holder.radioButton.setChecked(true); 
    }else{ 
    holder.radioButton.setChecked(false); 
    } 

    holder.radioButton.setTag(position); 

    holder.radioButton.onClick(){ 
    selectedPosition = (Integer)holder.radioButton.getTag(); 
    notifyDataSetChanged(); 
    } 

) 


static class Holder { 
    RadioButton radioButton; 
} 
+0

Thnx的答覆。你能通過代碼告訴我嗎? – Shivangi

+0

@Shivangi檢查更新的答案 – Spartan

+0

亞我已經嘗試過這一點,但它一次只選擇一個單選按鈕,但我想要的是,當用戶單擊列表項目的任何單選按鈕時,它可以被選中,當點擊相同的單選按鈕應該再次取消選擇。 – Shivangi

0

添加clickListener到radionButton所以如果你點擊單選按鈕會取消選擇,如果它被選中。 (默認情況下它會在點擊進行檢查,如果它不選中)

radioButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (radioButton.isChecked()) { 
       radioButton.setChecked(false); 
       } 
      } 
     }); 
0

在這一步首先我們得到的ButtonListView參考。之後,我們爲問題創建一個字符串數組,然後設置adapter來填充ListView中的數據。最後,我們在Button上執行setOnClickListener事件,因此無論何時用戶單擊Button時,使用Toast顯示所選問題的答案。

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

ListView simpleList; 
String[] questions; 
Button submit; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
// get the string array from string.xml file 
questions = getResources().getStringArray(R.array.questions); 
// get the reference of ListView and Button 
simpleList = (ListView) findViewById(R.id.simpleListView); 
submit = (Button) findViewById(R.id.submit); 
// set the adapter to fill the data in the ListView 
CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), questions); 
simpleList.setAdapter(customAdapter); 
// perform setOnClickListerner event on Button 
submit.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
String message = ""; 
// get the value of selected answers from custom adapter 
for (int i = 0; i < CustomAdapter.selectedAnswers.size(); i++) { 
message = message + "\n" + (i + 1) + " " + CustomAdapter.selectedAnswers.get(i); 
} 
// display the message on screen with the help of Toast. 
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); 
} 
}); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
getMenuInflater().inflate(R.menu.menu_main, menu); 
return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
// Handle action bar item clicks here. The action bar will 
// automatically handle clicks on the Home/Up button, so long 
// as you specify a parent activity in AndroidManifest.xml. 
int id = item.getItemId(); 

//noinspection SimplifiableIfStatement 
if (id == R.id.action_settings) { 
return true; 
} 

return super.onOptionsItemSelected(item); 
} 
} 


In this step we create a custom adapter class and extends BaseAdapter in this class. In this step we firstly set the data in the list and then perform setOnCheckedChangeListener event on RadioButton. 


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

import java.util.ArrayList; 


public class CustomAdapter extends BaseAdapter { 
Context context; 
String[] questionsList; 
LayoutInflater inflter; 
public static ArrayList<String> selectedAnswers; 

public CustomAdapter(Context applicationContext, String[] questionsList) { 
this.context = context; 
this.questionsList = questionsList; 
// initialize arraylist and add static string for all the questions 
selectedAnswers = new ArrayList<>(); 
for (int i = 0; i < questionsList.length; i++) { 
selectedAnswers.add("Not Attempted"); 
} 
inflter = (LayoutInflater.from(applicationContext)); 
} 

@Override 
public int getCount() { 
return questionsList.length; 
} 

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

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

@Override 
public View getView(final int i, View view, ViewGroup viewGroup) { 
view = inflter.inflate(R.layout.list_items, null); 
// get the reference of TextView and Button's 
TextView question = (TextView) view.findViewById(R.id.question); 
RadioButton yes = (RadioButton) view.findViewById(R.id.yes); 
RadioButton no = (RadioButton) view.findViewById(R.id.no); 
// perform setOnCheckedChangeListener event on yes button 
yes.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
// set Yes values in ArrayList if RadioButton is checked 
if (isChecked) 
selectedAnswers.set(i, "Yes"); 
} 
}); 
// perform setOnCheckedChangeListener event on no button 
no.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
// set No values in ArrayList if RadioButton is checked 
if (isChecked) 
selectedAnswers.set(i, "No"); 

} 
}); 
// set the value in TextView 
question.setText(questionsList[i]); 
return view; 
} 
} 
+0

嘿,我有ListView和根據用戶需要,用戶可以添加儘可能多的數據,他需要,並根據他的點擊選擇或取消選擇列表項目 – Shivangi

+0

嘿@ Shivangi,你的清單中有多少個單選按鈕? –

+0

這取決於用戶,它在listview中添加了多少項目,因此單選按鈕不能修復 – Shivangi

0
radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       // Radio button 
       RadioButton rb1=(RadioButton)findViewById(R.id.rdb1); 
       if (rb1.isChecked()){ 
        Toast.makeText(MainActivity.this, "1 option selected", Toast.LENGTH_LONG).show(); 
       } 
       else{ 
        Toast.makeText(MainActivity.this, "2 option selected", Toast.LENGTH_LONG).show(); 

       } 
      } 
     });