我想做一个ArrayAdapter显示图像和文字.如果可能,我不想要例子.我希望有人向我解释getView()工作原理.
谢谢.
这真的很奇怪.
当我使用标准ArrayAdapter进行ListView调用时,setItemChecked工作正常
但是当使用定制的ArrayAdapter时却没有.
那是什么原因?这是一个错误吗?或者我错过了什么?
public class Test_Activity extends Activity {
/** Called when the activity is first created. */
private List<Model> list;
private ListView lView;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Create an array of Strings, that will be put to our ListActivity
setContentView(R.layout.main);
lView = (ListView) findViewById(R.id.ListView01);
lView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
list = getModel();
//with this adapter setItemChecked works OK
lView.setAdapter(new ArrayAdapter<Model>(this,
android.R.layout.simple_list_item_multiple_choice, list));
//**************************
//PROBLEM: with this adapter it does not check any items on the screen
// ArrayAdapter<Model> adapter …Run Code Online (Sandbox Code Playgroud) 你能告诉我之间的差异ArrayAdapter,BaseAdapter以及ListAdapter.
我在自定义arrayAdapter中实现自定义getFilter时遇到问题.实际上我不知道如何实现它.试过各种代码,但仍然没有运气.这是我的自定义数组适配器.
package com.test.FilterableList.Adapters;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.test.FilterableList.Models.ListTO;
import com.test.FilterableList.R;
import android.widget.Filterable;
public class FilterableAdapter extends ArrayAdapter<ListTO> implements Filterable {
// declaring our ArrayList of items
public ArrayList<ListTO> objects;
/* here we must override the constructor for ArrayAdapter
* the only variable we care about now is ArrayList<Item> objects,
* because it is the list of objects we want to display.
*/
public FilterableAdapter(Context context, int textViewResourceId, ArrayList<ListTO> objects) …Run Code Online (Sandbox Code Playgroud) 这是我的ArrayAdapter.我希望通过遵循ViewHolder模式来提高效率:
但我不确定如何做到这一点.
更新:ViewHolder模式
private class QuoteAdapter extends ArrayAdapter<Quote> {
private ArrayList<Quote> items;
// used to keep selected position in ListView
private int selectedPos = -1; // init value for not-selected
public QuoteAdapter(Context context, int textViewResourceId, ArrayList<Quote> items) {
super(context, textViewResourceId, items);
this.items = items;
}
public void setSelectedPosition(int pos) {
selectedPos = pos;
// inform the view of this change
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder; // …Run Code Online (Sandbox Code Playgroud) 我ListActivity和我自己的ArrayAdapter班级一起使用.当我覆盖方法时ArrayAdapter.areAllItemsEnabled(),ArrayAdapter.isEnabled()列表视图中某些单元格之间的分隔符消失.有谁知道如何避免这种情况?即使对于残疾细胞,我也需要显示分频器.
我看到文档说这个方法返回给定项的位置,但是如果ArrayAdapter中不存在这样的项,它会返回什么?
相反,创建多个活动,我想改变ArrayAdapter的的ListView需要.我没有在API中看到有关提及是否可以setAdapter()多次调用的问题.
更具体地说,我想开始一项有活动的活动ListView.在这个例子中,ListView用listView.setAdapter(this)from,比如a 来初始化CategoryArrayAdapter.
然后用户选择一个类别.在不启动新活动的情况下,代码将为其设置新的适配器ListView.新的适配器,说ItemArrayAdapter电话listView.setAdapter(this).
是否有人有成功完成此操作的经验或知道为什么不应该这样做的具体原因?
这是在android中使用微调器的示例代码:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.gender_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
我已经明白我们需要为适配器中的数据行指定布局
但为什么再次使用setDropDownViewResource()方法.我的意思是这个函数做了什么,并告诉我它是如何与...的构造函数不同ArrayAdapter.
我已经阅读了文档,但完全不了解.
我是Android的初学者,但我尝试进行自定义列表视图过滤,我以某种方式工作.我唯一的问题是我保留所有值("原始"ArrayList)的ArrayList在每个过滤中的项目上越来越低.我无法解释这一点,但我认为你可以以某种方式帮助我.
无论如何这里是Custom ArrayAdaptor:
public class PkmnAdapter extends ArrayAdapter<Pkmn> {
private ArrayList<Pkmn> original;
private ArrayList<Pkmn> fitems;
private Filter filter;
public PkmnAdapter(Context context, int textViewResourceId, ArrayList<Pkmn> items) {
super(context, textViewResourceId, items);
this.original = items;//new ArrayList<Pkmn>();
this.fitems = items;//new ArrayList<Pkmn>();
}
@Override
public void add(Pkmn item){
original.add(item);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
Pkmn pkmn = original.get(position);
if (pkmn != …Run Code Online (Sandbox Code Playgroud) android ×10
listview ×4
java ×2
listadapter ×2
baseadapter ×1
filter ×1
position ×1
spinner ×1