当您实现SpinnerAdapter时,您将获得getDropDownView,它与getView您需要扩展时的不同之处BaseAdapter.
我尝试Activity在Android中创建一个,此活动只包含ListView其他内容.
据我所知填写列表视图我们需要使用ArrayAdapter.
所以要了解ArrayAdapter,我已阅读以下链接:
http://developer.android.com/reference/android/widget/ArrayAdapter.html
但我仍然无法理解它!
最大的疑问之一是为什么构造函数需要TextView资源ID而我的活动没有任何TextViews我应该给它什么?
我并不是说这是唯一的构造函数,只是因为我无法理解它背后的逻辑.
为了创建一个简单的列表视图,我还提到了以下链接:
但我的主要疑问是它为什么需要TextView资源ID呢?
如果有人能用一个例子解释它,那将非常有帮助.
编辑:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
Run Code Online (Sandbox Code Playgroud) 为什么当我使用SimpleCursorAdapter for ListView时,我在ListView中有像这样的项高度 - 
(我的代码基于此)
但是当使用数组Listview项目有很大的高度

(我基于此学习listview )
项目列表视图的行布局是
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么使用ArrayAdapter和SimpleCursorAdapter时行高的差异?
android listview row android-arrayadapter simplecursoradapter
在将一个元素添加到与listview关联的arrayadapter之后,我试图平滑地滚动到列表的最后一个元素.问题是它只是滚动到一个随机位置
arrayadapter.add(item);
//DOES NOT WORK CORRECTLY:
listview.smoothScrollToPosition(arrayadapter.getCount()-1);
//WORKS JUST FINE:
listview.setSelection(arrayadapter.getCount()-1);
Run Code Online (Sandbox Code Playgroud) android listview selection smooth-scrolling android-arrayadapter
我正在上课,如下所示
// All necessary imports are here
public class More extends Activity {
String[] MoreItems = { "Transfers", "Budgets", "Branches", "Tools", "News",
"Customer Service", "Settings", "Help", "About" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.more_view);
ListView moreListView = (ListView) findViewById(R.id.moreListView);
MoreListAdapter listAdapter = new MoreListAdapter();
moreListView.setAdapter(listAdapter);
// accountsTypeListView.setOnItemClickListener(listClickListner);
}
class MoreListAdapter extends ArrayAdapter<String> {
MoreListAdapter() {
super(More.this, R.layout.list_item, MoreItems);
}
public View getView(int position, View convertView, ViewGroup parent) {
View row;
if (convertView == null) {
LayoutInflater inflater = …Run Code Online (Sandbox Code Playgroud) 我在自定义ArrayAdapter中有一个ListView,它在每行中显示一个图标ImageView和一个TextView.当我使列表足够长以允许您滚动它时,顺序开始正确,但是当我开始向下滚动时,一些较早的条目开始重新出现.如果我向上滚动,旧订单会更改.反复执行此操作最终会导致整个列表顺序看似随机.因此,滚动列表要么导致子顺序更改,要么绘图未正确刷新.
什么可能导致这样的事情发生?我需要将项目显示给用户的顺序与它们添加到ArrayList的顺序相同,或者至少保持一个静态顺序.如果我需要提供更详细的信息,请告诉我.任何帮助表示赞赏.谢谢.
我正在尝试过滤使用此ArrayAdapter填充的ListView:
package me.alxandr.android.mymir.adapters;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import me.alxandr.android.mymir.R;
import me.alxandr.android.mymir.model.Manga;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.SectionIndexer;
import android.widget.TextView;
public class MangaListAdapter extends ArrayAdapter<Manga> implements SectionIndexer
{
public ArrayList<Manga> items;
public ArrayList<Manga> filtered;
private Context context;
private HashMap<String, Integer> alphaIndexer;
private String[] sections = new String[0];
private Filter filter;
private boolean enableSections;
public MangaListAdapter(Context context, int textViewResourceId, ArrayList<Manga> items, boolean enableSections)
{ …Run Code Online (Sandbox Code Playgroud) 是否可以重绘一行中的一行ListView?我有一个ListView行是LinearLayouts.我听一个偏好改变,有时候我需要改变一行View内的LinearLayout一个.有没有办法让它重新绘制该行而不调用listview.notifyDatasetChanged()?
我试过在视图(内部)上调用view.invalidate(),LinearLayout但它没有重绘行.
如在,ListView的ELEMENTS可以是片段.我知道您可以将TextView XML分配给ListView以更改其外观,但是您可以将片段添加到ListView中.
例如:我有一个片段.所述片段的XML包含一个ImageView,一些大型TextView和一个小型TextView.Fragment类代码接收Bundle,然后根据内容相应地填充TextViews和ImageView.Fragment XML和Fragment代码都可以正常工作(我可以很好地显示单个Fragment).我有一个FragmentActivity,我想在其中显示上面提到的碎片列表.这是我用来尝试填充FragmentActivity视图中的ListView的代码:
ArrayList<Fragment> fragList = new ArrayList<Fragment>();
Fragment fragment = Fragment.instantiate(this, TileItem.class.getName());
Bundle bundle = new Bundle();
bundle.putInt("key", 0);
fragment.setArguments(bundle);
fragList.add(fragment);
ArrayAdapter<Fragment> adapter = new ArrayAdapter<Fragment>(this, R.layout.tile_item, fragList);
listItems.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
这是我对此的思考方式.我创建了一个Fragments的ArrayList来保存我所有实例化的视图.然后创建一个片段,创建一个包,将数据添加到包(这样的片段可以正确地封送数据到它的意见),加上捆绑的片段,然后最后片段添加到ArrayList.之后,我创建一个ArrayAdapter,添加我想要使用的元素布局,以及我制作的片段列表; 然后将ListView设置为从我的适配器读取.
任何运行此代码的人都可能会获得NPE @实例化ArrayAdapter.是什么赋予了?这甚至可能吗?在我继续绞尽脑汁之前,有人可以告诉我,如果我只是在浪费时间吗?有没有更好的办法?我一直在想用滚动型的,但这么多的ListView的功能将需要重新实现,我讨厌恨,恨重复发明轮子时,它不是必需的.
感谢所有人的阅读,特别感谢您的决定,如果您决定离开他们.我试图寻找一个既定的答案,但我似乎找到的是关于使用片段的ListView INSIDE的问题/网页; 不使用碎片作为ListView的元素
编辑:我接受了以下建议,并开始调查更多.从事情出现,我应该能够使用该膨胀片段,而不是从XML只是平了建筑的自定义接口的方式(因为缺乏一个更好的方式来描述这一过程),但我目前的实现正试图设置时抛出NPE适配器.
这是我的自定义适配器代码(为简洁起见缩短):
public class AdapterItem extends ArrayAdapter<Fragment> {
Context c;
List<Fragment> f;
public AdapterItem(Context c, List<Fragment> f) {
super(c, R.layout.tile_item, f);
this.c = c;
this.f = f;
}
@Override
public View getView(int pos, View v, ViewGroup vg) {
LayoutInflater i = (LayoutInflater) …Run Code Online (Sandbox Code Playgroud) 在开发Android程序时; 并且你想要一个ArrayAdapter你可以简单地拥有一个Class(大多数时候使用ViewHolder后缀)或直接膨胀你的convertView并通过id找到你的视图.
那么使用ViewHolder有什么好处?
两个例子都在这里:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = ((Activity)getContext()).getLayoutInflater().inflate(R.layout.row_phrase, null);
}
((TextView) convertView.findViewById(R.id.txtPhrase)).setText("Phrase 01");
}
Run Code Online (Sandbox Code Playgroud)
要么 :
static class ViewHolder {
ImageView leftIcon;
TextView upperLabel;
TextView lowerLabel;
}
Run Code Online (Sandbox Code Playgroud)
最后在getView中:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.row_layout,
null, false);
holder = new ViewHolder();
holder.leftIcon = (ImageView) view.findViewById(R.id.leftIcon); …Run Code Online (Sandbox Code Playgroud)