android - 如何在 BaseAdapter 中刷新 Listview?

标签 android listview android-listview

<分区>

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

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);

    }



}

这是我的 Activity 类代码:

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 ,我不知道该怎么做,我找到了一些答案,但实际上这对我没有帮助,感谢您的帮助。

最佳答案

YourActivity.this.recreate();

这将重新创建您的列表。在执行这些操作的 Activity 中保留一个变量 n=false 。然后,当您使用列表回调 Activity 时,只需将其作为 true 传递即可。

在您执行这些操作的 Activity 中,

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

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

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

希望对您有所帮助。干杯!

关于android - 如何在 BaseAdapter 中刷新 Listview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23844976/

相关文章:

android - 带 ProgressBar 的 Endless RecyclerView 用于分页

android - 使用ffmpeg Android在视频中设置动态水印

android - Webview Android 超时

android - 如何从 AOSP 构建库?

android - 使用按钮滚动 ListView

android - Xamarin.Forms ListView 通过代码设置 SelectedItem

android - 如何自动更改对下一个列表项的关注

android - 为什么 ListView 没有为正确的项目设置动画?

android - 如何引用阶段?使用 flex for Facebook actionscript 移动 API 登录方法

android ListView onItemClick