【问题标题】:why mylistview not reload after change status?为什么 mylistview 在更改状态后不重新加载?
【发布时间】:2014-02-28 05:01:43
【问题描述】:

我有一个自定义列表视图和活动。我从 listview 自定义调用事件 imageclick 并调用活动。但是 adapter.notifyDataSetChanged();不工作。

 package com.olsvn.studyapp;

    import java.util.ArrayList;

    import android.app.Activity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    import com.olsvn.studyapp.HomeActivity;

    import com.olsvn.studyapp.dao.Word;

    public class WordArrayAdapter extends ArrayAdapter<Word> implements
            OnClickListener {

        Activity context = null;
        ArrayList<Word> myArray = null;
        int layoutId;

        public WordArrayAdapter(Activity context, int layoutId, ArrayList<Word> arr) {
            super(context, layoutId, arr);
            this.context = context;
            this.layoutId = layoutId;
            this.myArray = arr;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            convertView = inflater.inflate(layoutId, null);

            if (myArray.size() > 0 && position >= 0) {

                final Word words = myArray.get(position);
                final TextView txtcontent = (TextView) convertView
                        .findViewById(R.id.txtcontent);
                final TextView txtspell1 = (TextView) convertView
                        .findViewById(R.id.txtspell1);
                final TextView txtmeaning = (TextView) convertView
                        .findViewById(R.id.txtmeaning);

                txtcontent.setText(words.getContent());
                txtspell1.setText(words.getSpell1());
                txtmeaning.setText(words.getMeaning());

                final ImageView imgcheck = (ImageView) convertView
                        .findViewById(R.id.imgcheck);

                if (words.getStatus() == 0) {
                    imgcheck.setImageResource(R.drawable.start);
                } else if (words.getStatus() == 1) {
                    imgcheck.setImageResource(R.drawable.start_50);
                } else {
                    imgcheck.setImageResource(R.drawable.start_100);
                }
                imgcheck.setOnClickListener(new OnItemClickListener(position));

            }

            return convertView;
        }

        private class OnItemClickListener implements OnClickListener {
            private int mPosition;

            OnItemClickListener(int position) {
                mPosition = position;
            }

            @Override
            public void onClick(View arg0) {
                Word word_item = (Word) myArray.get(mPosition);
                int item_id = word_item.getId();
                int item_status = word_item.getStatus();
                HomeActivity sct = new HomeActivity();
                sct.setContext(context);
                sct.CheckStatus(item_status, item_id,mPosition);
            }
        }

        @Override
        public Word getItem(int position) {
            return super.getItem(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return super.getCount();
        }

        public WordArrayAdapter get(int mPosition) {
            return null;
        }

        @Override
        public void onClick(View arg0) {
        }

    }

和一个活动

package com.olsvn.studyapp;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import android.widget.Toast;

import com.olsvn.studyapp.dao.DatabaseHandler;
import com.olsvn.studyapp.dao.Word;

public class HomeActivity extends Activity {

    Activity context;
    ArrayList<Word> arrWords = new ArrayList<Word>();
    WordArrayAdapter adapter;
    ListView lvWords;
    boolean CheckUpdate = false;

    DatabaseHandler db;

    public void setContext(Activity context) {
        this.context = context;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        getTopRecord();
        lvWords.setOnScrollListener(new OnScrollListener() {

            public void onScrollStateChanged(AbsListView view, int scrollState) {


            }

            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {

                if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
                {
                    boolean flag_loading = false;
                    if(flag_loading == false)
                    {
                        flag_loading = true;
                    }
                }
            }
        });
    }

    public void CheckStatus(int status, int id,int position) {
        db = new DatabaseHandler(context);
        int statusNew = status + 1;
        if (status != 2) {
            CheckUpdate = db.updateStatus(id, statusNew);
            adapter.notifyDataSetChanged();
        }

        if (CheckUpdate = true) {
            Toast.makeText(context, "update trạng thái thành công",
                    Toast.LENGTH_SHORT).show();

        } else {
            Toast.makeText(context, "update trạng thái không thành công",
                    Toast.LENGTH_SHORT).show();
        }

    }

    //get list word
    public void getTopRecord() {
        String where ="<2";
        db = new DatabaseHandler(getApplicationContext());
        arrWords = db.getByStatus(20, where);
        lvWords = (ListView) findViewById(R.id.lvWords);
        adapter = new WordArrayAdapter(this, R.layout.layout_tu_vung, arrWords);
        lvWords.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }

为什么适配器.notifyDataSetChanged();在检查状态();不调用 myadapter 也不重新加载

列表错误(如果我编辑为...)

CheckUpdate = db.updateStatus(id, statusNew);
arrWords.get(position).setStatus(statusNew);
adapter.notifyDataSetChanged();

02-28 13:26:54.788: E/AndroidRuntime(9355): 致命异常: main 02-28 13:26:54.788: E/AndroidRuntime(9355): java.lang.IndexOutOfBoundsException: 无效索引 3,大小为 0 02-28 13:26:54.788: E/AndroidRuntime(9355): 在 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 02-28 13:26:54.788: E/AndroidRuntime(9355): 在 java.util.ArrayList.get(ArrayList.java:304) 02-28 13:26:54.788: E/AndroidRuntime(9355): 在 com.olsvn.studyapp.HomeActivity.CheckStatus(HomeActivity.java:41) 02-28 13:26:54.788: E/AndroidRuntime(9355): 在 com.olsvn.studyapp.WordArrayAdapter$OnItemClickListener.onClick(WordArrayAdapter.java:81) 02-28 13:26:54.788: E/AndroidRuntime(9355): 在 android.view.View.performClick(View.java:4114) 02-28 13:26:54.788: E/AndroidRuntime(9355): 在 android.view.View$PerformClick.run(View.java:17097) 02-28 13:26:54.788: E/AndroidRuntime(9355): at android.os.Handler.handleCallback(Handler.java:615)

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    改为:

    public void CheckStatus(int status, int id,int position) {
            db = new DatabaseHandler(context);
            int statusNew = status + 1;
            if (status != 2) {
                CheckUpdate = db.updateStatus(id, statusNew);
                arrWords.get(position).setStatus(statusNew);
                adapter.notifyDataSetChanged();
            }
    
            if (CheckUpdate = true) {
                Toast.makeText(context, "update trạng thái thành công",
                        Toast.LENGTH_SHORT).show();
    
            } else {
                Toast.makeText(context, "update trạng thái không thành công",
                        Toast.LENGTH_SHORT).show();
            }
    
        }
    

    您还需要更改列表中单词的状态

    【讨论】:

    • adapter.notifyDataSetChanged();不工作和错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多