我有一个自定义列表视图,其中包含所有行的切换按钮。我有一个用于ToggleButton的onlick列表器,我试图将listview中所有切换按钮的状态设置为false,除了我预设的那个。我已经在下面发布了适配器的代码。请帮我解决一下这个。
为了使它更加简单,我必须在按下/单击时将ToggleButton状态设置为True,并将所有其他切换按钮状态设置为False。而且就像一个Radio组按钮。请指教。
package Test.in.example.testairlight;
import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
public class PaAdapter extends ArrayAdapter<PaModel> {
SQLiteDatabase db;
private DBHelper dbH;
private ArrayList<PaModel> objects;
public PaAdapter(Context context, int textViewResourceId, ArrayList<PaModel> objects) {
super(context, textViewResourceId, objects);
this.objects = objects;
}
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
final Context cc=parent.getContext();
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.pa_list_item, null);
}
PaModel i = objects.get(position);
if (i != null) {
TextView ttd = (TextView) v.findViewById(R.id.devicelocation);
final TextView mtd = (TextView) v.findViewById(R.id.deviceid);
TextView dzone = (TextView) v.findViewById(R.id.txtzonedetail);
final ToggleButton togglePA = (ToggleButton) v.findViewById(R.id.togglePA);
final ToggleButton toggleAlert = (ToggleButton) v.findViewById(R.id.toggleAlert);
final ToggleButton toggleListen = (ToggleButton) v.findViewById(R.id.toggleListen);
if (ttd != null){
ttd.setText(i.getDevicelocation());
}
if (mtd != null){
mtd.setText(String.valueOf(i.getDeviceid()));
}
toggleListen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//// Set Everything to OFF State
//// Turn ON only the active Item
}
});
////// Listen Button
if (dzone !=null){
dzone.setText(i.getDevicezonedetail());
}
}
return v;
}
}
答案 0 :(得分:0)
这样的东西?
toggleListen.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// do whatever you want here
togglePA.setChecked(false);
toggleAlert.setChecked(false);
}
}
});
答案 1 :(得分:0)
我不知道您是否要将列表中的所有按钮设置为false,或者只是将当前列表项中的按钮设置为false。 所以让我们面对第一个:
你可以先在适配器中制作一个像这样的二维ArrayList:
ArrayList<ToggleButton[]> tButtons = new ArrayList<ToggleButton[]>();
因此,有一个ToggleButton-Arrays的ArrayList。每个ToggleButton []由三个ToggleButton对象组成。 ArrayList中的ToggleButton-Arrays数量未定义。
现在,您必须将ToggleButtons设置为getView()内的ArrayList:
//other code here
final ToggleButton togglePA = (ToggleButton) v.findViewById(R.id.togglePA);
final ToggleButton toggleAlert = (ToggleButton) v.findViewById(R.id.toggleAlert);
final ToggleButton toggleListen = (ToggleButton) v.findViewById(R.id.toggleListen);
ToggleButton[] tButtonsInListItem;
if(tButtons.get(position) == null) {
tButtonsInListItem = new ToggleButton[3];
tButtons.set(position, tButtonsInListItem);
} else {
tButtonsInListItem = tButtons.get(position);
}
tButtonsInListItem[0] = togglePA;
tButtonsInListItem[1] = toggleAlert;
tButtonsInListItem[2] = toggleListen;
现在你已准备好所有的ToggleButtons进行修改了!
所以这是代码:
toggleListen.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
for(ToggleButton[] tButtonsArray : tButtons) {
for(ToggleButton tButton : tButtonsArray) {
if(tButton == buttonView) {
tButton.setChecked(true);
} else {
tButton.setChecked(false);
}
}
}
}
}
});
如果您只想将同一个listitem的按钮设为false,请告知我们:)
编辑: 也许我应该说这不是我认为最好的解决方案。 我实际上认为你应该在模型中的某个地方有数据(真/假)。 然后你可以操作模型,并将模型数据放回到视图(ToggleButtons)中显示。