相关疑难解决方法(0)

在notifyDataSetChanged之后Android ListView没有刷新

我的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)

android android-listview notifydatasetchanged

113
推荐指数
3
解决办法
18万
查看次数

使用适配器动态更新listview

教程使用SimpleAdapter工作正常,但我需要在输入新数据时更新适配器中的数组.

你能否指导我如何使用SimpleAdapter以外的东西更新ListView?

android listview

69
推荐指数
2
解决办法
16万
查看次数

另一个getView被多次调用

我的每个项目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)

android listview

19
推荐指数
1
解决办法
2万
查看次数

Android notifyDataSetChanged

我有一个充满自定义的列表ArrayAdapter.

我想每秒更新一个进度条,所以我试图使用notifyDataSetChanged()以重新绘制列表,但它似乎不起作用.

android android-arrayadapter

14
推荐指数
1
解决办法
7万
查看次数

在列表视图中跳过一行

我想getView()是为列表中的每个项目调用,但我的问题是,如果与该行关联的数据为空,我们是否可以不显示该行.我想getView ()只在里面这样做.

例如:

如果名称将在列表视图中显示的人员的警报为空.我不想在列表视图中显示该人员的姓名.

android adapter android-listview

9
推荐指数
1
解决办法
5886
查看次数

删除时未删除的文件仍显示在 Listview 中

我制作了一个程序,该程序使用存储在设备上的视频填充列表视图并播放它们。它还尝试使用 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)

我不明白为什么会这样。有什么有用的建议请...

video android listview mediastore delete-file

5
推荐指数
1
解决办法
2436
查看次数

ListView setText在特定位置

我定义了以下代码,以便能够在特定位置设置文本.

if(position == 0) {
                holder.text.setText("blah");
            }
Run Code Online (Sandbox Code Playgroud)

我想要检查位置是否等于0,然后如果是,则在位置p上设置文本 - 每次它是p =位置+ 1(下一个位置).我们是否能够将文本从持有者设置为文本视图,但是在某个位置.

谢谢.

android listview android-adapter baseadapter android-viewholder

5
推荐指数
2
解决办法
3659
查看次数

notifyDataSetChanged不起作用?

我写下面的申请:

  • 有一个AutoCompleteTextView字段
  • 作为适配器我正在使用ArrayAdapter和ListArray
  • ListArray由一些常量字符串项和一个项组成,每当用户在字段中键入内容时,它们将动态更改

我使用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)

android

2
推荐指数
1
解决办法
8194
查看次数

Android:如何正确使用NotifyDataSetChanged与SimpleExpandableListAdapter?

我正在努力更新我的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

2
推荐指数
1
解决办法
8474
查看次数

删除ArrayList上的元素会在ArrayAdapter上抛出IndexOutOfBoundsException

我正在开发一个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)

android android-arrayadapter indexoutofboundsexception

2
推荐指数
2
解决办法
4406
查看次数

无法在onPostExecute内更新/重绘listView

我有这个代码:

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)

java android android-asynctask android-activity

2
推荐指数
1
解决办法
1238
查看次数

是什么决定了getView()的位置参数中的值范围?

我在我的适配器的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的原因吗?

android

1
推荐指数
1
解决办法
120
查看次数

Android:索引0无效,大小为0.在哪里?

我得到一个无效的索引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)

java android indexoutofboundsexception

1
推荐指数
1
解决办法
6048
查看次数