我有一个Android,ListView其项目有一个复选框.
默认情况下会选中该复选框.取消选中后,应将其从列表中删除.
问题是onCheckedChanged被解雇了两次:当我点击复选框取消选中它(带isChecked false)和我删除项目后(带isChecked true).
这是我的ArrayAdapter的相关代码:
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, parent, false);
holder = new ViewHolder();
holder.check = (CheckBox) convertView.findViewById(R.id.check);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final Object item = this.getItem(position);
holder.check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked) {
remove(item); // This somehow calls onCheckedChanged again
} …Run Code Online (Sandbox Code Playgroud) ListView我AlertDialog在Android中有一个设置,我试图添加分隔符作为标题标题来帮助组织信息.我想出了如何显示它们......但它们仍然可由用户选择,这是不好的.
有没有办法禁用Android中可选择的项目ListView?我找到了一种方法isEnabled(int position)来查看某个项目是否已启用,但没有查看是否已禁用该项目.
无论如何在一个AutoCompleteTextView结果中有两个TextView?
例如
-------------------------------
result 1 title
result 1 alt text
-------------------------------
result 2 title
result 2 alt text
-------------------------------
Run Code Online (Sandbox Code Playgroud)
等等...
ArrayAdapter只允许一个视图绑定,那么如何在适配器中绑定更多视图?
像这样:
(...= new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_1item, R.id.list_item, String[]);
Run Code Online (Sandbox Code Playgroud)
我已经为ArrayAdapter中的layout参数创建了一个新的xml布局,除非我将TextView绑定到字符串数组,它只将文本设置为具有给定id的TextView.
我还搜索了关于这个的其他帖子,但它不符合我的需要.
如果有人可以帮助那将是绝对伟大的:)
谢谢.
我一直在使用Commonsware Android编程教程和教程5,额外的功劳2,挑战是使用多个布局在ListView中显示行,具体取决于对象的"类型名称"(餐厅的"类型"属性,这是一个字符串).因此,它表明压倒一切getItemViewType,并getViewTypeCount在自定义ArrayAdapter.此外,Android文档和其他在线食谱或博客文章也提出了相同的建议.
在这种情况下,遵循此配方并覆盖这两种方法可以正常工作,但会导致基于检查该Restaurant"type"属性值的冗余逻辑.例如(请注意,此适配器是一个内部类,并且restaurants是声明为外部Activity成员的Restaurant对象的ArrayList):
class RestaurantsAdapter extends ArrayAdapter<Restaurant> {
private static final int ROW_TYPE_DELIVERY = 0;
private static final int ROW_TYPE_TAKE_OUT = 1;
private static final int ROW_TYPE_SIT_DOWN = 2;
RestaurantsAdapter() {
super(LunchListActivity.this, android.R.layout.simple_list_item_1, restaurants);
}
public int getViewTypeCount() {
return 3;
}
public int getItemViewType(int position) {
String type = restaurants.get(position).getType();
if (type == "delivery") {
return ROW_TYPE_DELIVERY;
} else if (type == "take_out") {
return ROW_TYPE_TAKE_OUT;
} …Run Code Online (Sandbox Code Playgroud) 我需要填充ListView来自网络的数据,例如整个数据收集的2-3秒.我不希望用户看到加载Dialog并等待整个列表下载.相反,我希望在ListView每个项目可用时更新.
ArrayAdapter一个AsyncTask与OnProgressUpdate?notifyDatasetChanged()每次添加行后是否必须发出?Fragment/ Loader办法更好?在Activity模具之前完全取出数据并不重要(即Service不必要)
android android-arrayadapter android-listview android-asynctask android-fragments
我正在使用自定义ArrayAdapter在AutocompleteTextView上设置适配器(AddressAdapter extends ArrayAdapter).
public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> mData;
ArrayList<String> listTempPrefix = new ArrayList<String>();
ArrayList<String> listTemp = new ArrayList<String>();
String valueText;
String[] words;
String ulcase;
public AutoCompleteAdapter(Context context, int textViewResourceId, ArrayList<String> bS) {
super(context, textViewResourceId);
mData = bS;//new ArrayList<String>();
}
@Override
public int getCount()
{
synchronized (listTempPrefix)
{
return listTempPrefix.size();
}
}
@Override
public String getItem(int index)
{
synchronized (listTempPrefix)
{
try {
//Log.e("Error", listTempPrefix.get(index));
return listTempPrefix.get(index);
} catch(IndexOutOfBoundsException e) {
Log.e("Error", "IndexOutOfBoundsException");
return ""; …Run Code Online (Sandbox Code Playgroud) 所述的充气方法LayoutInflater抽象类具有作为取充气方法的第二个参数ViewGroup根.从文档中,它被称为"可选视图,作为生成的层次结构的父级".
有人可以举例说明如何使用这个参数吗?那你会放在那里?A ViewGroup可以是任何类型的布局LinearLayout.
我还不太明白如何处理这个参数.如果您正在膨胀的视图不是此处输入的布局的一部分,那么它将给出错误.不明白它的目的.
更多来自文档:
public View inflate (XmlPullParser parser, ViewGroup root)
Added in API level 1
Inflate a new view hierarchy from the specified xml node. Throws InflateException if there is an error.
出于性能原因,重要的是,视图通胀在很大程度上依赖于在构建时完成的XML文件的预处理.因此,目前还不能使用LayoutInflater有XmlPullParser过在运行时一个普通的XML文件.
参数解析器包含视图层次结构描述的XML dom节点.
root可选视图是生成的层次结构的父级.返回膨胀层次结构的根视图.如果提供了root,则这是根视图; 否则它是膨胀的XML文件的根.
我正在视图持有者/适配器模式之后创建"文档"的网格视图.在活动中,我从网络类中获得回调,因此我需要能够在不同的时间更新每个网格单元.
我这样做的方法是通过从对象元素(文档)到相应的视图持有者的映射映射.我需要这样做,因为适配器正在循环使用单元格,所以有时我可以收到一个回调来更新一个不可见的单元格,在这种情况下,回调信息将被忽略.
我可以看到getView适配器的方法被多次调用为位置0.我一直在读这是正常的.
inflating position 0 *** progressBar 1
recycling position 0
recycling position 0
inflating position 0 *** progressBar 2
recycling position 0
recycling position 0
recycling position 0
recycling position 0
recycling position 0
recycling position 0
Run Code Online (Sandbox Code Playgroud)
UI我需要从回调中更新的一个元素是一个进度条,我通过添加viewHolder到与文档关联的Map来跟踪.
除了第一个方法之外,这整个方法适用于所有位置.我可以识别的唯一区别是这些多次调用,getView所以我从那里开始调试.在progressBar我更新为" progressBar2",这是最新的geView夸大,但实际上它并没有给回应setVisible(View.VISIBLE).然后我对代码进行了一些更改以更新" progressBar1"并且它可以工作.
这意味着getView相同位置膨胀两次,但第二次没有被使用或显示.
我能做错什么?为什么progressbar1工作而progressbar2没有?我希望这getView会给我一个与职位相对应的最新观点.
谢谢.
适配器:
public class DocumentPickerGridViewAdapter extends ArrayAdapter<Document> implements Filterable {
private final DocumentPickerGridViewController picker;
private ArrayList …Run Code Online (Sandbox Code Playgroud) AutoCompleteTextView在纵向模式的下拉列表中显示它的建议.我想在对话框或横向模式的下拉列表中显示建议,此处EditText和键盘全屏显示.
我应该在适配器中使用哪种布局将提示显示为横向模式下的对话框.我目前正在使用android.R.layout.simple_dropdown_item_1line.
我正在使用第三方库创建一个可搜索的微调器.我在我的应用程序中添加了库类(SearchableListDialog,SearchableSpinner).一切都工作正常,但仍然是我面临的一个问题,例如,在搜索视图小部件中,如果我搜索Abc,我没有将结果过滤为Abc但是当点击列表视图项时,结果显示项目为ABC.这就像位置是项目的更改,但列表没有显示可搜索的结果.我不知道我哪里错了.我多次修改代码但没有得到理想的结果.
Searchable Spinner xml代码:
<com.example.my.currencyconverterapp.activity.SearchableSpinner
android:id="@+id/spinner"
android:layout_below="@+id/rl_currency_converterted_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
这是我的片段代码,我正在为可搜索的微调器设置适配器.
countriesCustomAdapterInr = new CountriesCustomAdapterInr(getActivity(), R.layout.custom_spinner_items, arrayList,res);
spinner.setAdapter(countriesCustomAdapterInr);
assert spinner != null;
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getActivity(), ""+arrayList.get(i).getFull_name()+i, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {}
});
Run Code Online (Sandbox Code Playgroud)
这是第三方SearchableSpinner类:
public class SearchableSpinner extends android.support.v7.widget.AppCompatSpinner implements View.OnTouchListener,
SearchableListDialog.SearchableItem {
public static final int NO_ITEM_SELECTED = -1;
private Context _context;
private List _items;
private SearchableListDialog _searchableListDialog;
private boolean _isDirty;
private ArrayAdapter _arrayAdapter; …Run Code Online (Sandbox Code Playgroud) android listview android-arrayadapter android-spinner searchview
android ×10
listview ×3
adapter ×1
android-view ×1
autocomplete ×1
checkbox ×1
commonsware ×1
filter ×1
gridview ×1
inflate ×1
landscape ×1
searchview ×1
textview ×1