Android 显示/隐藏自定义适配器中的复选框
我想在自定义适配器中显示/隐藏复选框,但在3天的搜索中找不到任何解决方案 在“我的自定义适配器”中,当用户单击“显示”按钮并使其可见时,所有复选框都默认隐藏,然后再次单击“不可见”。 这是我的密码 谢谢你的帮助 主要活动Android 显示/隐藏自定义适配器中的复选框,android,listview,adapter,Android,Listview,Adapter,我想在自定义适配器中显示/隐藏复选框,但在3天的搜索中找不到任何解决方案 在“我的自定义适配器”中,当用户单击“显示”按钮并使其可见时,所有复选框都默认隐藏,然后再次单击“不可见”。 这是我的密码 谢谢你的帮助 主要活动 public class PhonebookList extends ListActivity{ private ArrayList<PhoneListView> lists; private ArrayList<String>
public class PhonebookList extends ListActivity{
private ArrayList<PhoneListView> lists;
private ArrayList<String> phoneName = new ArrayList<String>();
private PhoneListAdapter adapter;
private ListView lv;
private RelativeLayout rl;
private ImageView im1;
private ImageView im2;
private boolean checkUncheck = true;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_phonelist); // Get main display layout
lv = (ListView) findViewById(android.R.id.list);
String uniqueName = "";
int index = 0;
lists = new ArrayList<PhoneListView>();
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
null, null);
while (phones.moveToNext())
{
String name = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
if(!name.equals(uniqueName))
{
uniqueName = name;
phoneName.add(name);
lists.add(new PhoneListView(name, index, checkUncheck));
index++;
}
else
{
continue;
}
}
int x = lists.size();
PhoneListView[] toArray = new PhoneListView[x];
toArray = lists.toArray(toArray);
adapter = new PhoneListAdapter(this,
R.layout.custom_phone_listview_rows, toArray); // Layout whose hold rows
lv.setAdapter(adapter);
lv.setClickable(true);
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
Intent i = new Intent(getApplicationContext(),
PhoneBookDetail.class);
i.putExtra("id", phoneName.get(position));
startActivity(i);
}
});
}
@Override
protected void onResume()
{
final ImageView showButton = (ImageView) findViewById(R.id.show_hide_button);
showButton.setBackgroundResource(R.drawable.icon_choise);
showButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(checkUncheck)
{
showButton.setBackgroundResource(R.drawable.icon_choise);
checkUncheck = false;
rl.setVisibility(View.GONE);
im1.setVisibility(View.GONE);
im2.setVisibility(View.GONE);
}
else
{
showButton.setBackgroundResource(R.drawable.icon_completion);
checkUncheck = true;
rl.setVisibility(View.VISIBLE);
im1.setVisibility(View.VISIBLE);
im2.setVisibility(View.VISIBLE);
}
}
});
rl = (RelativeLayout) findViewById(R.id.show_hide_bar);
im1 = (ImageView) findViewById(R.id.show_hide_backup);
im2 = (ImageView) findViewById(R.id.show_hide_checkall);
rl.setVisibility(View.GONE);
im1.setVisibility(View.GONE);
im2.setVisibility(View.GONE);
super.onResume();
}
public void backupForChecked(View v){
if(adapter.checkedItem.size() == 0)
Toast.makeText(getApplicationContext(), "Select atleast one item", Toast.LENGTH_SHORT).show();
else
{
// Send selected values as Array
int[] myArray = new int[adapter.checkedItem.size()];
Bundle b=new Bundle();
for(int i = 0; i < adapter.checkedItem.size(); i++)
{
myArray[i] = Integer.parseInt(adapter.checkedItem.get(i));
}
b.putIntArray("contactID", myArray);
Intent i = new Intent(getApplicationContext(), SaveAllWithoutAsk.class);
i.putExtra("contactID", myArray);
startActivity(i);
}
}
public void checkUncheckAll(View v)
{
}
public void modoru(View v)
{
finish();
}
}
和我的自定义适配器
public class PhoneListAdapter extends ArrayAdapter<PhoneListView>{
private Context context;
private int resID;
private PhoneListView[] data = null;
public ArrayList<String> checkedItem = new ArrayList<String>();
public PhoneListAdapter(Context context, int resource,
PhoneListView[] objects)
{
super(context, resource, objects);
this.context = context;
this.resID = resource;
this.data = objects;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View row = convertView;
CustomHolder holder = null;
if (row == null)
{
LayoutInflater inflate = ((Activity) context).getLayoutInflater();
row = inflate.inflate(resID, null);
holder = new CustomHolder();
holder.cb = (CheckBox) row.findViewById(R.id.phonelist_checkbox);
holder.tw = (TextView) row
.findViewById(R.id.phonelist_contact_name);
row.setTag(holder);
}
else
holder = (CustomHolder) row.getTag();
final PhoneListView plv = data[position];
holder.tw.setText(plv.getName().toString());
holder.id = plv.getId();
holder.checked = plv.getItemToggled();
if (holder.checked == false)
holder.cb.setVisibility(View.GONE);
else
{
holder.cb.setVisibility(View.VISIBLE);
holder.cb.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (((CompoundButton) v).isChecked())
{
checkedItem.add("" + plv.getId());
}
else
{
checkedItem.remove("" + plv.getId());
}
}
});
}
return row;
}
public class CustomHolder
{
CheckBox cb;
TextView tw;
int id;
boolean checked;
}
}
屏幕截图在这里
您应该通过调用按钮OnClickListener中的notifyDatasetChanged函数来通知适配器数据集已更改
您还应该删除检查行是否为空。通常,重用视图是一种很好的做法,但由于视图会发生更改,并且在更改设置后需要更新,因此需要重新创建项目。能否将您用来显示的布局xml文件放入其中? 小部件具有分配给它们的属性,可以根据需要显示/隐藏它们。 检查您的复选框小部件以了解此类属性 问候 普拉萨德感谢您的回复。 我已经解决了我的问题1我将在这里写下解决方案谁可能会帮助别人的时间和头发 我创建了新的public方法,并在单击show/hide按钮时调用它
现在我仍在研究如何处理选中/取消选中所有复选框,我仍然需要想法和帮助我认为您可以为复选框的数量创建一个循环,然后遍历循环,即 1您可以有一个名为checkall的方法,其中所有元素都将循环并检查其状态,如果选中,则将保持选中状态,如果未选中,则将被选中 2另一个未选中的方法将被循环,且所有复选框均未选中 3还要看看你是否可以为你的复选框创建一个复选框组 致意 下面的代码是android示例代码中某些代码的修改版本,请查看是否有帮助 选中复选框单击查看时出现公共无效{
// Here you can create an array of the check boxes available in the view .
// create a loop which will check which one of the check boxes is checked and which one is not
对于
{
布尔值选中=复选框view.isChecked
// Check which checkbox was clicked
switch(view.getId()) {
case R.id.checkbox_meat:
if (checked)
// Put some meat on the sandwich
else
// Remove the meat
break;
case R.id.checkbox_cheese:
if (checked)
// Cheese me
else
// I'm lactose intolerant
break;
// TODO: Veggie sandwich
}
}
}在Android中,选择列表项是反模式的复选框。请阅读更多感谢回复。我认为您的链接没有涵盖我的情况。感谢回复。我不知道在Android中如何操作。首先,这不是正确的答案。其次,发布完整的答案或在评论部分添加说明。
// Check which checkbox was clicked
switch(view.getId()) {
case R.id.checkbox_meat:
if (checked)
// Put some meat on the sandwich
else
// Remove the meat
break;
case R.id.checkbox_cheese:
if (checked)
// Cheese me
else
// I'm lactose intolerant
break;
// TODO: Veggie sandwich
}
}