如何在BaseAdapter中刷新Listview?

时间:2014-05-24 12:23:33

标签: android listview android-listview

我有应用程序这个应用程序包含listview,Listview从本地数据库sqlite检索数据,通过使用适配器这是我的Adapter类代码:

public class CommandsListAdapter extends BaseAdapter {

    public static String ID = null;
    private List<String> data;

    ArrayList<HashMap<String, String>> commandList = new ArrayList<HashMap<String, String>>();

    private ArrayAdapter<String> listAdapter;

    Context context;

    public CommandsListAdapter(Context con,
            ArrayList<HashMap<String, String>> list) {

        commandList = list;
        context = con;


    }

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


    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return commandList.get(arg0);
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public View getView(final int index, View convertView, ViewGroup arg2) {
        // TODO Auto-generated method stub


        if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

            convertView = mInflater.inflate(R.layout.people_list, null);
        }




        TextView tvTime = (TextView) convertView.findViewById(R.id.timeOfBlock);
        TextView tvName = (TextView) convertView.findViewById(R.id.name);

        tvName.setText(commandList.get(index).get(MyDatabase.Number_Block));
        tvTime.setText(commandList.get(index).get(MyDatabase.Time_Of_Block));

        Typeface tf = Typeface.createFromAsset(context.getAssets(),
                "segoeuil.ttf");
        tvTime.setTypeface(tf);
        tvName.setTypeface(tf);

        convertView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                // Message.message(context,
                // commandList.get(index).get(MyDatabase.Block_Table_Id));

                Intent i = new Intent(context, MessageDetail.class);

                i.putExtra(ID,
                        commandList.get(index).get(MyDatabase.Block_Table_Id)
                                .toString());

                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            //  context.startActivity(i);

            }
        });

        convertView.setOnLongClickListener(new OnLongClickListener() {

            public boolean onLongClick(View v) {
                // TODO Auto-generated method stub
                ID=commandList.get(index).get(MyDatabase.Block_Table_Id);
                removeListItem(v, index);
                return false;
            }
        });

        return convertView;
    }

    protected void removeListItem(View rowView, final int positon) {

        final Animation animation = AnimationUtils.loadAnimation(
                context, android.R.anim.slide_out_right);
        rowView.startAnimation(animation);
        Handler handle = new Handler();
        handle.postDelayed(new Runnable() {

            @Override
            public void run() {
                commandList.remove(positon);



            MyDatabase db=new MyDatabase(context);  
            db.open();
        //  db.deleteBlock(ID);
            db.close();

                Message.message(context, ID);

            }
        }, 1000);

    }



}

这是我的活动类代码:

public class ListOfBlock extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_of_block);

        ActionBar actionBar = getActionBar();
        // for color
        actionBar.setBackgroundDrawable(new ColorDrawable(Color
                .parseColor("#a20000")));

        if (actionBar != null) {
            actionBar.setTitle(getResources().getString(
                    R.string.title_activity_list_of_block));
            actionBar.setDisplayHomeAsUpEnabled(true);
            // actionBar.setIcon(R.drawable.ic_launcher);
        }

        ListView lvCommands = (ListView) findViewById(R.id.ListOfBlockerListView);

        lvCommands.setAdapter(new CommandsListAdapter(getApplicationContext(),
                new MyDatabase(getApplicationContext()).getBlockers()));

    }


}

现在我想刷新getview方法中的listview,我不知道该怎么做,我找到了一些答案但是这对我没有帮助,谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

YourActivity.this.recreate();

这将重新创建您的列表。在执行这些操作的行为中保持变量说n = false。然后,当您使用list回调活动时,只需将其传递为true。

在您执行这些操作的活动中,

Intent i = new Intent(Operations.this,ListActivity.class);
ListActivity.n=true;
startActivity(i);

在ListActivity的onCreate中创建一个类变量boolean n=false;

if(n){
 ListActivity.this.recreate();
 }

希望它有所帮助。干杯!

答案 1 :(得分:1)

我希望这对你有所帮助,在类适配器中执行此操作: -

ArrayList<HashMap<String, String>> commandList = new ArrayList<HashMap<String, String>>();



private ArrayList<HashMap<String, String>> searchArrayList;

public CommandsListAdapter(Context con,
        ArrayList<HashMap<String, String>> list) {

    commandList = list;
    context = con;

    searchArrayList=list;
}

并创建一个函数来更新listview,就像在适配器类中一样: -

public void updateResults(ArrayList<HashMap<String, String>> results) {
        searchArrayList = results;
        //Triggers the list update
        notifyDataSetChanged();
    }

以及您想要更新listview的任何地方调用此功能,我为您Sister执行了此操作,如下所示: -

updateResults(commandList); 

有一件事可以肯定这些代码是你的所有代码,但我做了一些修改,updateResults函数commandList的参数这是你已经定义的ArrayAdapter。 我希望这是工作

答案 2 :(得分:0)

只需调用BaseAdapter类的notifyDataSetChanged()即可刷新列表视图项。根据您的要求适当调用它。 欢呼声。

相关问题