Android 如何在片段上刷新listview

Android 如何在片段上刷新listview,android,sqlite,listview,android-fragments,android-listview,Android,Sqlite,Listview,Android Fragments,Android Listview,我需要你的帮助 我在一个片段上有一个listview(BaseAdapter)(我用SQLite填充它),这个片段在pageViewer上滑动。 另外,ActionBar上有一个按钮,当我单击该按钮时,这将下载数据(外部SQLServer)并与SQLite同步 我的问题: 当我单击按钮时,listview如何在活动中可视化地刷新/更新它?这很简单,因为您可以在单击“下载数据”按钮时为listview设置适配器,并调用适配器的notifydatasetchanged方法 package com.

我需要你的帮助

我在一个片段上有一个listview(BaseAdapter)(我用SQLite填充它),这个片段在pageViewer上滑动。 另外,ActionBar上有一个按钮,当我单击该按钮时,这将下载数据(外部SQLServer)并与SQLite同步

我的问题:


当我单击按钮时,listview如何在活动中可视化地刷新/更新它?

这很简单,因为您可以在单击“下载数据”按钮时为listview设置适配器,并调用适配器的notifydatasetchanged方法

package com.example.alarmapp2;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

@SuppressLint("SimpleDateFormat")
public class MainActivity extends ActionBarActivity implements OnClickListener {
    private ImageView addButton;
    private TextView tvDate;
    private TimePicker tvTime;
    private EditText message;
    private Button save, cancel;
    private DataBaseHelper dbhelper;
    private ListView alarmListView;
    private PendingIntent pendingIntent;
    private AlarmManager manager;
    private static MainActivity inst;
    public static MainActivity instance() {
        return inst;
    }

    @Override
    public void onStart() {
        super.onStart();
        inst = this;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbhelper = new DataBaseHelper(this);
        alarmListView= (ListView) findViewById(R.id.alarm_list);
        addButton = (ImageView) findViewById(R.id.addButton);
        addButton.setOnClickListener(this);
        manager = (AlarmManager) getSystemService(ALARM_SERVICE);
        //setting data to list view 
        addListDetails();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @SuppressLint("InflateParams")
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.addButton:
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
            LayoutInflater layoutInflater = LayoutInflater.from(this);
            // setting layout view
            View promptView = layoutInflater.inflate(R.layout.alaram_popup, null, false);
            alertDialogBuilder.setView(promptView);
            tvDate = (TextView) promptView.findViewById(R.id.select_date);
            tvDate.setOnClickListener(this);
            tvTime = (TimePicker) promptView.findViewById(R.id.select_time);
            /*tvTime.setOnClickListener(this);*/
            tvTime.setIs24HourView(true);
            message = (EditText) promptView.findViewById(R.id.message);
            save = (Button) promptView.findViewById(R.id.save);
            cancel = (Button) promptView.findViewById(R.id.cancel);
            alertDialogBuilder.setCancelable(true);
            final AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            alertDialog.show();
            save.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    if (tvDate.getText().toString().length() == 0) {
                        tvDate.setError("Select Date");
                    } /*else if (tvTime.getText().toString().length() == 0) {
                        tvTime.setError("Select Date");
                    } */else if (message.getText().toString().length() == 0) {
                        message.setError("Select Date");
                    } else {
                        String timeMin="";
                        dbhelper=new DataBaseHelper(MainActivity.this);
                        if(tvTime.getCurrentMinute()<10){
                            timeMin="0"+tvTime.getCurrentMinute();
                        }else{
                            timeMin=""+tvTime.getCurrentMinute();
                        }
                        AlarmDoa doa = new AlarmDoa();
                        doa.setDate(tvDate.getText().toString());
                        doa.setTime(tvTime.getCurrentHour()+":"+timeMin);
                        doa.setMessage(message.getText().toString());
                        long Status=dbhelper.addalarm(doa);
                        alertDialog.dismiss();
                        if(Status!=0){
                            //settin data on click of button 
                            addListDetails();
                            Toast.makeText(MainActivity.this, "Alarm Set", Toast.LENGTH_SHORT).show();
                            setAlarm(tvDate.getText().toString(),tvTime.getCurrentHour()+":"+tvTime.getCurrentMinute(),message.getText().toString());
                        }else{
                            Toast.makeText(MainActivity.this, "Alarm Can't Be Set", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            });
            cancel.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    alertDialog.cancel();
                }
            });
            break;
        case R.id.select_date:
            Calendar c = Calendar.getInstance();
            SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
            String[] data = df.format(c.getTime()).split("-");
            DatePickerDialog datePicker = new DatePickerDialog(this, onDate, Integer.parseInt(data[0]),
                    Integer.parseInt(data[1]), Integer.parseInt(data[2]));
            datePicker.getDatePicker().setMinDate(System.currentTimeMillis());
            datePicker.show();
            break;
        case R.id.select_time:
            Calendar c1 = Calendar.getInstance();

            TimePickerDialog timePicker=new TimePickerDialog(this, onTime, c1.get(Calendar.HOUR_OF_DAY), c1.get(Calendar.MINUTE), false);
            timePicker.show();
            break;
        }
    }

    protected void setAlarm(String date, String time, String msg) {
        manager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
        alarmIntent.putExtra("date", ""+date);
        alarmIntent.putExtra("time", ""+time);
        alarmIntent.putExtra("msg", ""+msg);
        pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, 0);
        String[] data=time.split(":");
        Calendar calendar=Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY,Integer.parseInt( data[0]));
        calendar.set(Calendar.MINUTE, Integer.parseInt( data[1]));
        Log.d("calendar.getTimeInMillis()", ""+calendar.getTimeInMillis());
        Log.d("System", ""+calendar.getTime());
        manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
        Toast.makeText(this, "ALarm Set", Toast.LENGTH_SHORT).show();
    }

    OnDateSetListener onDate = new OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            String month="";
            if(monthOfYear<9){
                month= "0"+String.valueOf(monthOfYear+1);
            }else{
                month=String.valueOf(monthOfYear+1);
            }
            tvDate.setText( pad(dayOfMonth)+ "-" +  month+ "-" + String.valueOf(year));

        }
    };
    OnTimeSetListener onTime= new OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            //tvTime.setText(pad(hourOfDay) + ":" + pad(minute));
        }
    };
    private static String pad(int c) {
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);
    }

    private void addListDetails() {
        dbhelper=new DataBaseHelper(MainActivity.this);
        AlarmAdapter adapter= new AlarmAdapter(MainActivity.this, dbhelper.getAlarmList());
        adapter.notifyDataSetChanged();
        alarmListView.setAdapter(adapter);
    }
}
package com.example.alarmapp2;
导入java.text.simpleDataFormat;
导入java.util.Calendar;
导入android.annotation.SuppressLint;
导入android.app.AlarmManager;
导入android.app.AlertDialog;
导入android.app.DatePickerDialog;
导入android.app.DatePickerDialog.OnDateSetListener;
导入android.app.pendingent;
导入android.app.TimePickerDialog;
导入android.app.TimePickerDialog.OnTimeSetListener;
导入android.content.Context;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.WindowManager;
导入android.widget.Button;
导入android.widget.DatePicker;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.TimePicker;
导入android.widget.Toast;
@SuppressLint(“SimpleDataFormat”)
公共类MainActivity扩展ActionBarActivity实现OnClickListener{
私有图像视图添加按钮;
私有文本视图tvDate;
私人时间选择器;
私人短信;
私有按钮保存、取消;
私有数据库助手dbhelper;
私有列表视图alarmListView;
私人吊挂帐篷;
私人警报经理;
私人静态维护活动研究所;
公共静态MainActivity实例(){
返回仪表;
}
@凌驾
public void onStart(){
super.onStart();
inst=这个;
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbhelper=新的DataBaseHelper(此);
alarmListView=(ListView)findViewById(R.id.alarm\u列表);
addButton=(ImageView)findViewById(R.id.addButton);
addButton.setOnClickListener(此);
manager=(AlarmManager)getSystemService(报警服务);
//将数据设置为列表视图
addListDetails();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@SuppressLint(“充气参数”)
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.addButton:
AlertDialog.Builder alertDialogBuilder=新建AlertDialog.Builder(此);
LayoutInflater LayoutInflater=LayoutInflater.from(this);
//设置布局视图
View promptView=LayoutFlater.inflate(R.layout.alaram_弹出窗口,null,false);
alertDialogBuilder.setView(promptView);
tvDate=(TextView)promptView.findViewById(R.id.select_date);
tvDate.setOnClickListener(此);
tvTime=(时间选择器)promptView.findViewById(R.id.select_time);
/*setOnClickListener(这个)*/
设置为24小时视图(真);
message=(EditText)promptView.findViewById(R.id.message);
save=(按钮)promptView.findViewById(R.id.save);
cancel=(按钮)promptView.findViewById(R.id.cancel);
alertDialogBuilder.setCancelable(true);
final AlertDialog AlertDialog=alertDialogBuilder.create();
alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG\u DIM\u落后);
alertDialog.show();
save.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(tvDate.getText().toString().length()=0){
tvDate.setError(“选择日期”);
}/*else if(tvTime.getText().toString().length()==0){
设置错误(“选择日期”);
}*/else if(message.getText().toString().length()==0){
message.setError(“选择日期”);
}否则{
字符串timeMin=“”;
dbhelper=newdatabasehelper(MainActivity.this);

if(tvTime.getCurrentMinute())如果您对ListView的适配器使用CursorAdapter并使用LoaderManager.LoaderCallbacks,则很容易。这意味着采用ContentProvider让CursorLoader了解数据更改,但这并不难在所有库中实现(SimpleSQLConfig就是其中之一)我将BaseAdapter与ListView一起使用我将BaseAdapter与ListViewActionBarActivity一起使用不推荐使用;请使用AppCompatActivity