我已经成功实现了一个listView,其中每一行都是我创建的对象.我有一个接口读取一些对象并返回它们的数组,我将其传递给适配器构造函数.我想要做的是,由于列表可能很长,我的界面允许每次读取更多的项目(第0页,第1页......)所以我想,当用户到达列表的最后一行时,加载下一页并将其插入listView.这样做的正确方法是什么?我实际上希望"到达列表末尾"触发回调,我可以请求更多页面并将它们加载到列表中.我的主要问题有点旧,但我不介意使用baseAdapter,两者都可以工作,我只是不知道什么对任务更好.
我需要getFilter()从类中重写一个方法,ArrayAdapter 然后在github中找到了源代码
//package name
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.content.Context;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;
public class CustomAdapter<T> extends ArrayAdapter<T> implements Filterable{
private ArrayList<T> mOriginalValues;
private List<T> mObjects;
private CustomFilter mFilter;
private final Object mLock = new Object();
public CustomAdapter(Context context, int textViewResourceId, T[] objects) {
super(context, textViewResourceId, objects);
mObjects = Arrays.asList(objects);
// TODO Auto-generated constructor stub
}
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
if (mFilter …Run Code Online (Sandbox Code Playgroud) 所以我试图对一个简单的arrayadapter listview进行排序.这是我尝试过的:
ListView lv;
String[] months = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
ArrayAdapter<String> adapter;
ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView1);
lv.setFastScrollEnabled(true);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, months);
lv.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO …Run Code Online (Sandbox Code Playgroud) public class MainActivity extends AppCompatActivity {
ArrayList<String> list = new ArrayList<>();
ArrayAdapter<String> adapter;
ArrayList<String> data1 = new ArrayList<>();
ArrayList<String> data2 = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (int i = 0 ; i< 10 ;i++){
data1.add(String.valueOf(i));
}
for (int i = 20; i < 30; i++){
data2.add(String.valueOf(i));
}
Spinner spinner = (Spinner) findViewById(R.id.demo);
adapter = new ArrayAdapter<>(this,android.R.layout.simple_dropdown_item_1line,list);
spinner.setAdapter(adapter);
}
private void change(boolean which){
if (which){
list.clear();
list.addAll(data1);
}else{
list.clear();
list.addAll(data2);
}
adapter.notifyDataSetChanged();
}
@Override
public …Run Code Online (Sandbox Code Playgroud) java android spinner android-arrayadapter android-windowmanager
我将arrayList设置为12个项目,但是arrayAdapter只返回屏幕上的一个项目,为什么会这样?它应该在列表中显示12个项目.
public class MainActivity extends Activity {
ArrayList<CheckBoxInfo> cfo = new ArrayList<CheckBoxInfo>();
CheckBoxInfo cbr;
private ListAdapter MyAdapter;
ListView listview;
MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cbr = new CheckBoxInfo();
cbr.checkBoxName = "dfdjklfjdkljf";
cbr.checkBoxState = true;
for(int i = 0; i <12; i++){
cfo.add(cbr);
}
Toast.makeText(MainActivity.this, "size: " + cfo.size(), Toast.LENGTH_SHORT).show();
listview = (ListView) findViewById(R.id.listView);
myAdapter = new MyAdapter(cfo, this);
listview.setAdapter(myAdapter);
}
public class MyAdapter extends ArrayAdapter<CheckBoxInfo> {
private List<CheckBoxInfo> checkBoxList;
private Context context;
public MyAdapter(List<CheckBoxInfo> infoList, …Run Code Online (Sandbox Code Playgroud) 我是android ArrayAdapters的新手,我在填充ListView时面临一个空指针异常.我用来填充listview的数据不是null,我已经检查过了.整个事情在第一次加载时工作正常,但是一旦我向下滚动到列表的末尾,应用程序崩溃了.
这是我的堆栈跟踪:
E/AndroidRuntime? FATAL EXCEPTION: main
java.lang.NullPointerException
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
at android.widget.AbsListView.obtainView(AbsListView.java:2386)
at android.widget.ListView.makeAndAddView(ListView.java:1769)
at android.widget.ListView.fillDown(ListView.java:672)
at android.widget.ListView.fillGap(ListView.java:636)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5201)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4358)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:524)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5059)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
这是我的活动代码:"我已经标记了我填充listView的行"
public class AddPersonActivity extends Activity
implements
PlusClient.OnPeopleLoadedListener,
PlusClient.ConnectionCallbacks,
PlusClient.OnConnectionFailedListener {
private static final String TAG = "AddPersonActivity";
private static final String STATE_RESOLVING_ERROR = "resolving_error";
private ArrayAdapter sListAdapter; …Run Code Online (Sandbox Code Playgroud) android android-arrayadapter android-layout android-listview
我在ListView中获得了重复的项目.向后和向下滚动有时会更改项目顺序.我用谷歌搜索并发现许多线程报告了这个错误,但没有一个帮助我解决我的问题.
这是我的代码:
活动:
package com.github.progval.SeenDroid;
import java.util.ArrayList;
import java.util.List;
import com.github.progval.SeenDroid.lib.Connection;
import com.github.progval.SeenDroid.lib.Message;
import com.github.progval.SeenDroid.lib.MessageFetcher;
import com.github.progval.SeenDroid.lib.Query.ParserException;
import android.app.Activity;
import android.app.ListActivity;
import android.content.SharedPreferences;
import android.os.Bundle;
public class ShowUserActivity extends ListActivity {
private Connection connection;
public ArrayList<Message> listMessages = new ArrayList<Message>();
public MessageAdapter adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.profile);
this.connection = new Connection();
this.setTitle(R.string.homefeed_title);
this.listMessages = new MessageFetcher(this.connection).fetchUser();
this.bindUi();
}
private void bindUi() {
this.adapter = new MessageAdapter(this, this.listMessages); …Run Code Online (Sandbox Code Playgroud) 好的,我的旋转器有问题.其中包含从Web服务中提取的数据.我所遇到的问题是,当没有点击微调器而不是显示微调器中第一个项目的字符串时,它会显示一个对象引用.
我看了相关的问题,但仍然看不到我缺少什么,是否像缺少toString参考一样简单?
这是填充微调器的代码
private void buildDrinkDropDown() {
List<NameValuePair> apiParams = new ArrayList<NameValuePair>(1);
apiParams.add(new BasicNameValuePair("call", "drinkList"));
bgt = new BackGroundTask(MAP_API_URL, "GET", apiParams);
try {
JSONArray drinks = bgt.execute().get();
for (int i = 0; i < drinks.length(); i++) {
JSONObject d = drinks.getJSONObject(i);
String id = d.getString(TAG_ID_DRINK);
String createdAt = d.getString(TAG_CREATED_AT);
String updatedAt = d.getString(TAG_UPDATED_AT);
String price = d.getString(TAG_PRICE);
String name = d.getString(TAG_NAME);
drinkList.add(new Drink( createdAt ,id, name, price,updatedAt ));
}
drinkField = (Spinner) findViewById(R.id.countryField);
DrinkAdapter dAdapter = new DrinkAdapter(this, android.R.layout.simple_spinner_item, drinkList); …Run Code Online (Sandbox Code Playgroud) 当创建一个定制adapter的ListViewandroid系统中,我看到,我要创建一个类的扩展ArrayAdapter类并实现getView(..)方法.
所有这一切都没问题,但我想知道调用方法和执行的顺序.即在哪个代码点getView()被调用?
我正在尝试使用arrayadapter过滤listview.arraydapter参数是String [] [].问题是任何事情都会发生.我必须覆盖Filter接口?在那种情况下,有人可以提供一些提示吗?
我试图过滤的数组的每个位置都是这样的
galleryValues[0][0] -> "tiulo"
[0][1] -> "desc"
[0][2] -> "etc"
Run Code Online (Sandbox Code Playgroud)
我试图过滤它:
lstContinente = (ListView)findViewById(R.id.list);
lstContinente.setTextFilterEnabled(true);
adapter = new PortaitArrayAdapter(cx,galleryValues);
lstContinente.setAdapter(adapter);
ed_busqueda.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapter.getFilter().filter(s.toString());
adapter.notifyDataSetChanged();
}
});
Run Code Online (Sandbox Code Playgroud)
适配器代码:
public class PortaitArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[][] values;
private List<Imagen> …Run Code Online (Sandbox Code Playgroud)