我的ListFragment代码
public class ItemFragment extends ListFragment {
private DatabaseHandler dbHelper;
private static final String TITLE = "Items";
private static final String LOG_TAG = "debugger";
private ItemAdapter adapter;
private List<Item> items;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.item_fragment_list, container, false);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
getActivity().setTitle(TITLE);
dbHelper = new DatabaseHandler(getActivity());
items = dbHelper.getItems();
adapter = new ItemAdapter(getActivity().getApplicationContext(), items);
this.setListAdapter(adapter);
}
@Override
public void onResume() {
super.onResume();
items.clear();
items …Run Code Online (Sandbox Code Playgroud) 本教程使用SimpleAdapter工作正常,但我需要在输入新数据时更新适配器中的数组.
你能否指导我如何使用SimpleAdapter以外的东西更新ListView?
我的每个项目ListView包含一个ImageView和一个TextView,这将填充远程信息.
我有一个URL ImageView,因此我开始AsyncTask下载图像,并将setImageBitmap使用下载的位图调用.
这很顺利,但是当创建ListView时,getView()经常会调用它.它调用getView前10行的7倍(只有7行可见).(所以:0,1等,10,0,1等).
然后我可以顺利滚动到第10项.但在那之后,对于每个新行,listview再次调用getView前10个项目的7倍.(这会导致滞后..)
但是当我setImageBitmap从中删除时AsyncTask,这一切都不会发生!
可能是什么问题呢?可能是某些布局是大的,这将导致另一连串的getViews?
这里有一些代码:
<ListView
android:id="@+id/mylist"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_below="@+id/mydivider"
android:divider="@+color/mycolor"
android:dividerHeight="2dp"
android:fadingEdge="none"
android:fastScrollEnabled="true"
android:listSelector="@android:color/transparent"
android:scrollbars="horizontal"
android:scrollingCache="false"
android:smoothScrollbar="false" />
Run Code Online (Sandbox Code Playgroud)
AsyncTask:
public static class MyTask extends AsyncTask<String, Integer, Bitmap> {
private LruCache<String, Bitmap> mMap;
private String mUri;
private int mPosition;
private ViewHolder mHolder;
public MyTask (ViewHolder holder, int position, LruCache<String, Bitmap> map) {
mMap = map; …Run Code Online (Sandbox Code Playgroud) 我有一个充满自定义的列表ArrayAdapter.
我想每秒更新一个进度条,所以我试图使用notifyDataSetChanged()以重新绘制列表,但它似乎不起作用.
我想getView()是为列表中的每个项目调用,但我的问题是,如果与该行关联的数据为空,我们是否可以不显示该行.我想getView ()只在里面这样做.
例如:
如果名称将在列表视图中显示的人员的警报为空.我不想在列表视图中显示该人员的姓名.
我制作了一个程序,该程序使用存储在设备上的视频填充列表视图并播放它们。它还尝试使用 file.delete 函数来实现删除文件的功能。但是,使用 notifydatasetchange() 函数后,该文件仍显示在列表视图中。此外,我刚刚注意到视频文件已从 DCIM 文件夹中删除;但是,它显示在设备的图库中,但是当您单击它时,无法播放.. 这是我向用户显示对话框的部分代码,当用户单击 Yes 时,然后执行删除功能。
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
file.delete();
adapter.notifyDataSetChanged();
//list.setAdapter(adapter);
break;
case DialogInterface.BUTTON_NEGATIVE:
image2.setImageResource(R.drawable.play);
flag.setText("play");
//No button clicked
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("This Item will be Deleted\nAre you sure?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
}// else closes
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样。有什么有用的建议请...
我定义了以下代码,以便能够在特定位置设置文本.
if(position == 0) {
holder.text.setText("blah");
}
Run Code Online (Sandbox Code Playgroud)
我想要检查位置是否等于0,然后如果是,则在位置p上设置文本 - 每次它是p =位置+ 1(下一个位置).我们是否能够将文本从持有者设置为文本视图,但是在某个位置.
谢谢.
android listview android-adapter baseadapter android-viewholder
我写下面的申请:
我使用TextChangedListener来更新最后一个列表项.但似乎,更新只发生一次.
我添加了一些代码.也许有人可以告诉我,我做错了什么.
public class HelloListView extends Activity
{
List<String> countryList = null;
AutoCompleteTextView textView = null;
ArrayAdapter adapter = null;
static String[] COUNTRIES = new String[]
{
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Yemen", "Yugoslavia", "Zambia", "Zimbabwe", ""
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
countryList = Arrays.asList(COUNTRIES);
textView = (AutoCompleteTextView) findViewById(R.id.edit);
adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, countryList);
adapter.notifyDataSetChanged();
textView.setAdapter(adapter);
textView.setThreshold(1);
textView.addTextChangedListener(new TextWatcher()
{
public …Run Code Online (Sandbox Code Playgroud) 我正在努力更新我的ExpandableListView通道NotfiyDataSetChanged.
我正在从网络服务器下载一些数据,这些数据在我的网站上正确显示ExpandableListView.
通过单击子项,用户将显示一个对话框,可以在其中更改某个值.这个值应该显示在ExpandableListView,所以我改变了我的类中的背景数据并调用NotifyDataSetChanged().这适用于子项,直到我向Web服务器发送新请求.然后,无论是在我的下载功能还是我的本地更改功能,都NotifyDataSetChanged()可以.
由于我想要更改某些组项内容(在对话框之后),我也会更改我的组的背景数据.但是,虽然NotifyDataSetChanged()对于子项目至少工作几次,但它对组项目完全没有任何影响.
如果我的后台数据确实发生变化,我已经使用debugger&log.d()进行了检查,但确实如此.
看看这个问题和这个帖子,我相信我正在使用notifyData......错了.但我无法弄清楚它应该如何运作.我发现只有有用的功能registerDataSetObserver(observer),但我不知道如何使用它.:/
这是我的代码.可能会有一些小错误,因为我试图将其剥离到必要的部分.
@SuppressWarnings("rawtypes")
private List children;
@SuppressWarnings("rawtypes")
private List groups;
private SimpleExpandableListAdapter expListAdapter;
/*download from webserver*/
void function1()
{
groups = new ArrayList();
children = new ArrayList();
*/go through a list I downloaded*/
for (...)
{
HashMap groupMap = new HashMap();
groupMap.put(groupName, downloadedList.getName());
groupMap.put(groupRate, downloadedList.getMatchrate() + getString(R.string.matchrate));
groups.add(groupMap);
ArrayList childList = new ArrayList(); …Run Code Online (Sandbox Code Playgroud) java user-interface android expandablelistview expandablelistadapter
我正在开发一个Android 3.1应用程序.
我有自定义ArrayAdapter.我想在ListView中显示名称列表.
这些名称是可以下载并在本地保存的表单.当用户下载并保存一个或多个时,我打电话updateFormsNotDownloaded().但是当我这样做时,我得到一个IndexOutOfBoundsException.我认为这个问题是因为我打电话notifyDataSetChanged().
看看我的代码:
public class FormAdapter extends ArrayAdapter<Form>
{
private Context context;
private int layoutResourceId;
private List<Form> forms;
private ArrayList<Integer> checkedItemsPosition;
private Button downloadButton;
public ArrayList<Integer> getCheckedItemsPosition()
{
return checkedItemsPosition;
}
public String[] getSelectedFormsId()
{
String[] ids = new String[checkedItemsPosition.size()];
int i = 0;
for(Integer pos : checkedItemsPosition)
{
Form f = forms.get(pos.intValue());
ids[i] = f.FormId;
i++;
}
return ids;
}
/**
* Called when selected forms has been downloaded and save it locally …Run Code Online (Sandbox Code Playgroud) 我有这个代码:
package com.gs.britishjokes;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import org.json.JSONArray;
import org.json.JSONException;
import android.app.Activity;
import android.app.Application;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class TopJokes extends Activity {
public static class Globals extends Application{
String[] myStringArray = {"a","b","c","a","b","c","a","b","c","a","b","c","a","b","c","a","b","c"};
public String[] getMyStringArray() {
return myStringArray;
}
public void setMyStringArray(String[] myStringArray) {
this.myStringArray = myStringArray;
}
}
public static ArrayAdapter<String> adapter;
public static ListView listView; …Run Code Online (Sandbox Code Playgroud) 我在我的适配器的getView()例程中遇到崩溃,因为它的位置值为6,而我的数据源只有6个项目.所以我假设位置参数应该在[0] - [5]的范围内?是什么决定了getView()的位置参数中的值范围?
细节:
XML ......
<ListView
android:id="@android:id/list"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:cacheColorHint="@color/colGrey"
android:background="@color/colGrey"
android:clickable="true"
android:fastScrollEnabled="true"
android:choiceMode="none"/>
Run Code Online (Sandbox Code Playgroud)
...在MyListActivity中,这是一个ListActivity...
public static ListView lv; // my ListView in the code
Run Code Online (Sandbox Code Playgroud)
...在onCreate()期间...
setContentView(R.layout.mylist);
lv = getListView();
Run Code Online (Sandbox Code Playgroud)
创建适配器并绑定它...
mylistadapter = new MyListAdapter(MyListActivity.this);
setListAdapter(mylistadapter); // bind the adapter
Run Code Online (Sandbox Code Playgroud)
...数据源是一个名为listItems的ArrayList.在运行程序的过程中,它的大小各不相同,可能在程序执行的早期阶段已有15个...
public static ArrayList<String>listItems=new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
...在我的适配器中,这是一个BaseAdapter,我的getCount()的ovveride看起来像这样...
@Override
public int getCount() {
return listItems.size();
}
Run Code Online (Sandbox Code Playgroud)
...当我在getView()中调用getCount()时,它返回6,这是数据源中的项目数,但是如果我调用lv.getCount()它返回15.(任何想法这15来自哪里?)这可能是适配器调用带有索引太大的getView的原因吗?
我得到一个无效的索引0,大小是0错误,无法弄清楚这发生在哪里.我一直在运行调试器,无法放置它.我所知道的是我之前的代码中会发生什么以及之后会发生什么.下面我发布了logcat,崩溃前完成的代码,以及之后运行的代码.
这是logcat:
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
at android.widget.ListView.dispatchDraw(ListView.java:3307)
at android.view.View.draw(View.java:15174)
at android.widget.AbsListView.draw(AbsListView.java:4318)
at android.view.View.updateDisplayListIfDirty(View.java:14096)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.draw(View.java:15174)
at android.view.View.updateDisplayListIfDirty(View.java:14096)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1089)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at android.view.View.draw(View.java:14895)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14091)
at android.view.View.getDisplayList(View.java:14119)
at …Run Code Online (Sandbox Code Playgroud) android ×13
listview ×4
java ×3
adapter ×1
baseadapter ×1
delete-file ×1
mediastore ×1
video ×1