我正在开发一个ListActivity,它会显示一堆数字(权重).我想更改ListView中特定行的背景.为此,我创建了ArrayAdapter类的自定义实现,并重写了getView方法.适配器接受数字列表并将数字20的背景设置为黄色(为简单起见).
public class WeightListAdapter extends ArrayAdapter<Integer> {
private List<Integer> mWeights;
public WeightListAdapter(Context context, List<Integer> objects) {
super(context, android.R.layout.simple_list_item_1, objects);
mWeights = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
int itemWeight = mWeights.get(position);
if (itemWeight == 20) {
v.setBackgroundColor(Color.YELLOW);
}
return v;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,不仅数字20的行获得黄色背景,而且数字0的行(第一行),我不知道为什么会这样.
我在getView方法中做错了什么(比如调用super方法)?我实现的原因是:所有返回的视图应该是相同的(这就是我调用super方法的原因)只有适合if条件的视图才应该更改.
谢谢你的帮助!
所以说我使用以下适配器用于AutoCompleteTextView:
public class RosterAdapter extends ArrayAdapter<Player> {
...
}
Run Code Online (Sandbox Code Playgroud)
这是使用一个名为Player的对象,其中默认的AutoCompleteTextView使用String.
当我使用自定义列表时,列表显示正常,但我唯一的问题是当我开始输入内容时,它不会显示正确的内容.
例如-如果我开始打字bo,我希望这个名字的人Bob Henderson,Garry Bobrinski等等.
但是出现的是相同的列表,这似乎与我输入的内容无关 - 只是随机出现.
我可以不使用自定义对象来工作吗?我是否必须使用字符串才能正确匹配条目?或者有什么我可以告诉它查看每个条目的特定字符串?
*更新*
这是一些更多的代码 - 这是我设置自定义适配器的方式RosterAdapter.这有效,但它的自动完成方面无法正常运行.它几乎就像是混淆了,不知道在对象中寻找什么,以匹配键入的字符串.
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_players);
RosterAdapter adapter = new RosterAdapter(RosterActivity.this, R.layout.roster_row, players);
textView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
这是使用通用的ArrayAdapter,这适用于匹配条目:
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_players);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(RosterActivity.this, R.layout.players_autocomplete, players);
textView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用和ArrayAdapter动态更新AutocompleteTextView的列表.为了更新此View,我使用TextWatcher监视AutocompleteTextView中可能发生的任何更改.
问题是列表根本没有更新,我无法理解为什么.我一直在互联网上寻找类似的东西,我发现了几种不同的方法,但我仍然无法理解为什么这个应该是最简单的方法,不起作用.任何解释都将非常感激.
目标AVD:Google API等级10,Android 2.3.3
这是简化的代码:
public class AutocompleteActivity extends Activity implements TextWatcher {
ArrayAdapter<String> adapter = null;
AutoCompleteTextView acTextView = null;
ArrayList<String> addresses = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.autocompleteview);
acTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete_address);
adapter = new ArrayAdapter<String>(this, R.layout.listitem, addresses);
adapter.setNotifyOnChange(true);
acTextView.addTextChangedListener(this);
acTextView.setAdapter(adapter);
}
@Override
public void onTextChanged(CharSequence text, int start, int before, int after) {
try {
adapter.add("test");
}
catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) android dynamic autocompletetextview android-arrayadapter textwatcher
我的目标是动画某些ListView项目,而不必担心getView通过在自定义中用新增加的列表项替换列表项来搞乱动画ArrayAdapter.
如果我使用convertView以避免使新项目膨胀,则动画的顺序会随机变化.
手动缓存视图工作正常,但我怀疑这是一个很好的解决方案.好主意?
我已经创建了一个采用者来显示特定文件夹中的视频图像缩略图但是当我滚动它时稍微滞后但为什么会这样?
以下是代码:
主要活动类
public class TestvideolistingActivity extends ListActivity {
String filename = null;
String filePath = null;
String dirNameSlash = "/videotest/";
String dirName = "videotest";
String path = Environment.getExternalStorageDirectory() + dirNameSlash ;
String[] values;
String deleteFile ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// getting the own adapter
getInit();
}
@Override
protected void onResume() {
getInit();
super.onResume();
}
public void getInit() {
deleteFile = null;
values = getFilesArrayFromSdCard();
setListAdapter(new MyAdapter(this, values));
}
protected void onListItemClick(ListView l, View v, int …Run Code Online (Sandbox Code Playgroud) 所以我有一个自定义,ArrayAdapter所以我可以使用可用的标题/副标题视图ListView.我有一个EditText接受字符串并过滤适配器.
过滤器工作的意义在于它正在过滤正确的对象(我可以通过点击它来判断它并使用正确的"额外"来启动意图.)
但是,即使过滤工作,适配器中的项目也不会更新以显示正确的信息...标题和副标题不正确.
让我们说我们有0到9的项目ListView,我过滤到3项搜索,并说让过滤的项目显示5,6,9 ... 3项,但它的前3项目的原- 搜索ListView(0-2).如果我单击项目2(第三项),则9的内容包含在新意图中.这对于搜索条件是正确的,但标题确实反映了正确的信息.
我不确定我需要告诉ListView刷新什么.我不认为它notifyDataSetChanged();
任何帮助表示赞赏.谢谢!
public class myListAdapter extends ArrayAdapter<Pizza>{
private ArrayList<Pizza> items;
private PizzaViewHolder myListHolder;
private class PizzaViewHolder{
TextView title;
TextView subtitle;
}
public myListAdapter(Context context, int textViewResourceId, ArrayList<Pizza> items) {
super(context, textViewResourceId, items);
this.items = items;
// TODO Auto-generated constructor stub
}
@Override
public View getView(int pos, View convertView, ViewGroup parent){
View v = convertView;
if(v == null){
LayoutInflater vi = …Run Code Online (Sandbox Code Playgroud) 所以我用谷歌搜索,并搜索SO以寻找我认为可能是一个荒谬的疏忽的答案,但是这里有.
我有一个ListView,我正在填充一个ArrayAdapter我正在我的应用程序中的其他地方使用的对象列表.我已经检查getCount过,在我调用之前和之后,适配器中都有项目.setAdapter().但是,我的应用程序中没有任何内容出现.
我的主要布局res/layout/playlistview:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/playlist_screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#80000000"
android:gravity="center"
android:orientation="horizontal" >
<ListView
android:id="@+id/playlistview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#206"
android:background="#602" >
</ListView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
(我设置了颜色,这样我就可以更容易地看到发生了什么)
在textview每个项目res/layout/singlelistitem:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/single_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:padding="5dp"
android:background="#206">
</TextView>
Run Code Online (Sandbox Code Playgroud)
和我用来填充它的代码:
private ListView playlistView;
private void buildPlaylistView() {
playlistView = (ListView)findViewById(R.id.playlistview);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.singlelistitem, R.id.single_item, playlist.titlesAsArray());
playlistView.setAdapter(adapter);
playlistView.setVisibility(View.VISIBLE);
adapter.notifyDataSetChanged();
((ArrayAdapter<String>)playlistView.getAdapter()).notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
playlist.titlesAsArray()确实返回String[]并且有效.
我有两个.notifyDataSetChanged() …
我需要使用来自字符串资源的数组填充listview。如何将阵列传递给适配器?当我尝试关注时,出现以下错误
ArrayAdapter zooAdapter = ArrayAdapter.createFromResource(this, R.array.animals, android.R.id.text1);
zooList.setAdapter(zooAdapter);
zooList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
}
});
Run Code Online (Sandbox Code Playgroud)
除了找不到资源外,我不确定该如何处理错误日志。但是后来我所有的资源都在那里了,我没有从eclipse中出错。无论如何,我需要做的是将Array资源中的数据加载到我的arrayAdapter中,有人知道该怎么做吗?
FATAL EXCEPTION: main
android.content.res.Resources$NotFoundException: File from xml type layout resource ID #0x1020014
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2184)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2139)
at android.content.res.Resources.getLayout(Resources.java:891)
at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
at android.widget.AbsListView.obtainView(AbsListView.java:2306)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
at android.widget.ListView.onMeasure(ListView.java:1156)
at android.view.View.measure(View.java:15293)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1418)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:709)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:602)
at android.view.View.measure(View.java:15293)
at android.widget.SlidingDrawer.onMeasure(SlidingDrawer.java:270)
at android.view.View.measure(View.java:15293)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:630) …Run Code Online (Sandbox Code Playgroud) 我有一个问题:在ArrayAdapter的getView()函数中,我使用AsyncTask执行将图像加载到ImageView.但是当这个项目不可见(滚动列表视图)时,AsyncTask函数仍然加载图像.如果item不可见,我想禁用AsyncTask进程.有解决这个问题的方法吗?
我正在尝试学习kotlin,我想将我的一个android项目从java转换为kotlin.但我有一个问题
override fun onResponse(call: Call<List<CitySearch>>?, response: Response<List<CitySearch>>?) {
if(response != null && response.isSuccessful) {
val list = response.body()
cityAdapter.clear()
if(list != null && !list.isEmpty()){
cityAdapter.addAll(list)
listView.visibility = View.VISIBLE
recyclerView.visibility = View.GONE
cityName.visibility = View.GONE
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误操作不支持只读集合在kotlin.collections.EmptyList.clear()与cityAdapter.clear()的行上我不知道如何解决它.
对于所有项目,请检查
android ×10
listview ×5
java ×3
animation ×1
arrays ×1
autocomplete ×1
dynamic ×1
kotlin ×1
textwatcher ×1
thumbnails ×1
video ×1
visibility ×1