从android eclipse中的片段刷新或更新listadapter

从android eclipse中的片段刷新或更新listadapter,android,fragment,adapter,listadapter,android-side-navigation,Android,Fragment,Adapter,Listadapter,Android Side Navigation,我有一个MainActivity,当点击侧导航菜单时,会运行一些片段。在侧导航菜单中,有一个名为Number of SMS的项目,当您在另一个片段中选择所需的电话号码时,该项目将立即更新。但问题是我不知道如何从该片段刷新列表适配器。我定义了一个名为allvalues的类,它包含我的所有全局变量。负责SMS计数的变量是allvalues.NumberOfLocations 以下是主要活动的代码: package com.faraz.locatecar; import java.uti

我有一个MainActivity,当点击侧导航菜单时,会运行一些片段。在侧导航菜单中,有一个名为Number of SMS的项目,当您在另一个片段中选择所需的电话号码时,该项目将立即更新。但问题是我不知道如何从该片段刷新列表适配器。我定义了一个名为allvalues的类,它包含我的所有全局变量。负责SMS计数的变量是allvalues.NumberOfLocations 以下是主要活动的代码:

    package com.faraz.locatecar;



import java.util.ArrayList;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private DrawerLayout mDrawerLayout;
    public static ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;

    // nav drawer title
    private CharSequence mDrawerTitle;

    // used to store app title
    private CharSequence mTitle;

    // slide menu items
    private String[] navMenuTitles;
    private TypedArray navMenuIcons;

    public static  ArrayList<NavDrawerItem> navDrawerItems;
    public static NavDrawerListAdapter adapter;

    String passString;
    ProgressDialog mProgressDialog;
    MyDb dbf;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        allvalues.context = this;

        if(!allvalues.setno){
            Toast.makeText(allvalues.context, "Please choose a number", Toast.LENGTH_SHORT).show();
        }
        dbf = new MyDb(allvalues.context);
        String phoneNumbers = dbf.trakersCount();
        // to check if there is any phone numbers or not
        if(phoneNumbers.matches("0")){
            Toast.makeText(allvalues.context, "Please save a number first", Toast.LENGTH_SHORT).show();
        }

        mTitle = mDrawerTitle = getTitle();

        // load slide menu items
        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

        // nav drawer icons from resources
        navMenuIcons = getResources()
                .obtainTypedArray(R.array.nav_drawer_icons);


        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

        navDrawerItems = new ArrayList<NavDrawerItem>();

        // adding nav drawer items to array
        // Home
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
        // Find People
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
        // Photos
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1), true, allvalues.NumberOfLocations));
        // Communities, Will add a counter here
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
        // Pages
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
        // Traker number choose
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, phoneNumbers));
        // add tracker number
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons.getResourceId(6, -1)));

        // Recycle the typed array
        navMenuIcons.recycle();

        mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

        // setting the nav drawer list adapter
        adapter = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems);
        mDrawerList.setAdapter(adapter);

        // enabling action bar app icon and behaving it as toggle button
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, //nav menu toggle icon
                R.string.app_name, // nav drawer open - description for accessibility
                R.string.app_name // nav drawer close - description for accessibility
        ) {
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            // on first time display view for first nav item
            displayView(0);
        }
    }

    /**
     * Slide menu item click listener
     * */
    private class SlideMenuClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // display view for selected nav drawer item
            displayView(position);
        }
    }

    /**
     * Diplaying fragment view for selected nav drawer list item
     * */
    private void displayView(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            new SmsBased().execute();
            break;
        case 2:
            fragment = new OldListReader();
            break;
        case 3:
            fragment = new ShowEveryThing();
            break;
        case 4:
            break;
        case 5:
            fragment = new ChoosePhoneNumber();
            break;
        case 6:
            fragment = new NewTrakerRegister();
            break;

        default:
            break;
        }

        if (fragment != null) {
            final String MyPref = "mypref";
            SharedPreferences prefs = getSharedPreferences(MyPref, 0);
            if(prefs.getBoolean("FirstRun", true)){
                prefs.edit().putBoolean("FirstRun", false).commit();
                fragment = new PasswordFragment();
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.frame_container, fragment).commit();
                passString = allvalues.pass;
            }else{
                passString = dbf.passString();
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.frame_container, fragment).commit();
                mDrawerList.setItemChecked(position, true);
                mDrawerList.setSelection(position);
                setTitle(navMenuTitles[position]);
                mDrawerLayout.closeDrawer(mDrawerList);
            }
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }

    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getActionBar().setTitle(mTitle);
    }

    /**
     * When using the ActionBarDrawerToggle, you must call it during
     * onPostCreate() and onConfigurationChanged()...
     */

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggls
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    // Async part
    private class SmsBased extends AsyncTask<Void, Void, Void>
    {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(allvalues.context);
            mProgressDialog.setTitle("Please wait ");
            mProgressDialog.setMessage("SMS sending is in progress");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            allvalues.send_command = SmsManager.getDefault();
            String SendChangedPassword = "where," + passString + "#";
            allvalues.send_command.sendTextMessage(allvalues.PhoneNumberToSend, null, SendChangedPassword, null, null);
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // Set title into TextView
            Toast.makeText(allvalues.context, "SMS sent", Toast.LENGTH_SHORT).show();
            mProgressDialog.dismiss();          
        }
    }       


}
package com.faraz.locatecar;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.app.Fragment;
导入android.app.FragmentManager;
导入android.app.ProgressDialog;
导入android.content.SharedReferences;
导入android.content.res.Configuration;
导入android.content.res.TypedArray;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.ActionBarDrawerToggle;
导入android.support.v4.widget.DrawerLayout;
导入android.telephony.smsmsmanager;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ListView;
导入android.widget.Toast;
公共类MainActivity扩展了活动{
私人抽屉布局mDrawerLayout;
公共静态列表视图mDrawerList;
私有操作bardrawertoggle mDrawerToggle;
//导航抽屉标题
私有字符序列mDrawerTitle;
//用于存储应用程序标题
私有字符序列mTitle;
//幻灯片菜单项
私有字符串[]navMenuTitles;
专用型雷达导航仪;
公共静态数组列表;
公共静态导航适配器;
字符串passString;
进程对话框;
MyDb dbf;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
allvalues.context=this;
如果(!allvalues.setno){
Toast.makeText(allvalues.context,“请选择一个数字”,Toast.LENGTH_SHORT.show();
}
dbf=新的MyDb(allvalues.context);
字符串phoneNumbers=dbf.trakerscont();
//检查是否有任何电话号码
if(phoneNumbers.matches(“0”)){
Toast.makeText(allvalues.context,“请先保存一个数字”,Toast.LENGTH_SHORT.show();
}
mTitle=mDrawerTitle=getTitle();
//加载幻灯片菜单项
navMenuTitles=getResources().getStringArray(R.array.nav\u抽屉\u项目);
//参考资料中的导航抽屉图标
navMenuIcons=getResources()
.obtainTypedArray(R.array.nav_drawer_图标);
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.list\u slidermenu);
navDrawerItems=新的ArrayList();
//将导航抽屉项添加到阵列
//家
添加(新的NavDrawerItem(navMenuTitles[0],navMenuIcons.getResourceId(0,-1));
//找人
添加(新的NavDrawerItem(navMenuTitles[1],navMenuIcons.getResourceId(1,-1));
//照片
add(新的NavDrawerItem(navMenuTitles[2],navMenuIcons.getResourceId(2,-1),true,allvalues.NumberOfLocations));
//社区,将在此处添加一个计数器
add(新的NavDrawerItem(navMenuTitles[3],navMenuIcons.getResourceId(3,-1));
//页数
add(新的NavDrawerItem(navMenuTitles[4],navMenuIcons.getResourceId(4,-1));
//Traker号码选择
add(新的NavDrawerItem(navMenuTitles[5],navMenuIcons.getResourceId(5,-1),true,phoneNumber));
//添加跟踪器编号
add(新的NavDrawerItem(navMenuTitles[6],navMenuIcons.getResourceId(6,-1));
//回收类型化数组
navMenuIcons.recycle();
setOnItemClickListener(新的SlideMenuClickListener());
//设置导航抽屉列表适配器
适配器=新的NavDroperListAdapter(getApplicationContext(),
纳维特姆斯);
mDrawerList.setAdapter(适配器);
//启用操作栏应用程序图标并将其作为切换按钮
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle=新操作BarDrawerToggle(此,mDrawerLayout,
R.drawable.ic_抽屉,//导航菜单切换图标
R.string.app_name,//导航抽屉打开-可访问性说明
R.string.app_name//nav抽屉关闭-可访问性说明
) {
公共无效onDrawerClosed(视图){
getActionBar().setTitle(mTitle);
//调用onPrepareOptions菜单()以显示操作栏图标
无效操作菜单();
}
打开图纸上的公共空白(视图抽屉视图){
getActionBar().setTitle(mDrawerTitle);
//调用onPrepareOptions菜单()隐藏操作栏图标
无效操作菜单();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
如果(savedInstanceState==null){
//第一个导航项目的首次显示视图
显示视图(0);
}
}
/**
*幻灯片菜单项单击“侦听器”
* */
私有类SlideMenuClickListener实现
ListView.com侦听器{
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
//所选导航抽屉项目的显示视图
显示视图(位置);
}
}
/**
*为所选导航抽屉列表项显示片段视图
* */
私有void显示视图(内部位置){
//通过替换片段更新主要内容
package com.faraz.locatecar;

import java.util.ArrayList;

import android.app.Fragment;
import android.app.FragmentManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ChoosePhoneNumber extends Fragment {
    private static int i;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View view = inflater.inflate(R.layout.choose_number, container, false);

        allvalues.AllPhones_list = new ArrayList<String>();
        MyDb phonechoose = new MyDb(allvalues.context);
        phonechoose.readTrakers();
        allvalues.showphones = (ListView) view.findViewById(R.id.listphone);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(allvalues.context,android.R.layout.simple_list_item_1, android.R.id.text1, allvalues.AllPhones_list);
        allvalues.showphones.setAdapter(adapter);

        // just added from here
        allvalues.showphones.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, final View view,
                int position, long id) {
              final String item = (String) parent.getItemAtPosition(position);
              allvalues.PhoneNumberToSend = item;
              Toast.makeText(allvalues.context, "شماره :" + allvalues.PhoneNumberToSend, Toast.LENGTH_SHORT).show();
              allvalues.setno = true;
              SMSNumbers();
              Fragment fr = new HomeFragment();
              FragmentManager fm = getFragmentManager();
              fm.beginTransaction().replace(R.id.frame_container, fr).commit();         
            }

          });
        // till up here


        return view;
    }
    public void SMSNumbers()
    {

        Uri uriSms = Uri.parse("content://sms/inbox");
        Cursor cursor = allvalues.context.getContentResolver().query(uriSms, new String[]{"_id", "address", "date", "body"},null,null,null);
        if(cursor!=null){
        cursor.moveToFirst();
        while  (cursor.moveToNext())
        {
               String address = cursor.getString(1);
               if(address.equals(allvalues.PhoneNumberToSend)){
                   i++;
               }
        }
        }
        allvalues.NumberOfLocations = i + "";
        Toast.makeText(allvalues.context, allvalues.NumberOfLocations, Toast.LENGTH_SHORT).show();
    }

}
public interface FragmentListener {
    void refreshData();
}
private FragmentListener listener;
listener.refreshData();
public void setListener(FragmentListener listener) {
    this.listener = listener;
}
ChoosePhoneNumber fragment = new Fragment();
fragment.setListener(new FragmentListener() {
    public void refreshData() {
         //Whatever you want to do.
    }
});
getActivity().finish();
getActivity().startActivity(getActivity().getIntent());