如何从活动中调用Fragment方法来更新片段中的listview?

时间:2013-12-15 04:51:51

标签: android android-fragments

我想从对话框中选择项目后,从主要活动更新片段中的listview。

我在此活动中使用FragmentPagerAdapter

我的对话方法

private void showDialog(String routeName) {

        MyTTCDB db = new MyTTCDB(this);
        List<String> directions = db.getDirectionByRoute(routeName);

        AlertDialog.Builder builderSingle = new AlertDialog.Builder(this);

        builderSingle.setTitle("Direction");
        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                this, android.R.layout.select_dialog_singlechoice);

        for (String string : directions) {
            arrayAdapter.add(string);
        }

        builderSingle.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                });

        builderSingle.setAdapter(arrayAdapter,
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        String side = arrayAdapter.getItem(which);

                        FragmentStops fragment = (FragmentStops) mSectionsPagerAdapter
                                .getItem(1);
                        fragment.refresh(side);

                    }
                });
        builderSingle.show();

    }

我的片段

import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.anilvasani.myttc.StopsActivity.Interface_FragmentStops;
import com.anilvasani.myttc.adapter.AdapterStops;
import com.anilvasani.myttc.data.MyTTCDB;
import com.anilvasani.myttc.models.Stop;

public class FragmentStops extends Fragment {

    View view;
    AdapterStops myAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.fragement_stops, container, false);

        return view;
    }

    public void refresh(String side) {
        // TODO Auto-generated method stub

        String routeName = getActivity().getIntent()
                .getStringExtra("routeName").toString();

        ListView listStops = (ListView) view.findViewById(R.id.dialog_listView);
        // EditText txtSearch=(EditText)
        // view.findViewById(R.id.dialog_txtSearch);

        MyTTCDB db = new MyTTCDB(getActivity());
        List<Stop> allStops = db.getAllStopsByRouteAndSide(routeName, side);
        myAdapter = new AdapterStops(getActivity(), allStops);
        listStops.setAdapter(myAdapter);
    }

}

我收到的错误就像......

12-14 23:43:02.696: E/MessageQueue-JNI(7577): java.lang.NullPointerException
12-14 23:43:02.696: E/MessageQueue-JNI(7577):   at com.anilvasani.myttc.FragmentStops.refresh(FragmentStops.java:34)
12-14 23:43:02.696: E/MessageQueue-JNI(7577):   at com.anilvasani.myttc.StopsActivity$3.onClick(StopsActivity.java:120)
12-14 23:43:02.696: E/MessageQueue-JNI(7577):   at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941)

所以请帮助我,如何根据用户的输入从Activity调用Fragment方法。

1 个答案:

答案 0 :(得分:0)

看来你的错误来自这条线:

String routeName = getActivity().getIntent() .getStringExtra("routeName").toString();

确保以下事项:

  • 当您启动调用refresh方法(对话框所附加的活动)的活动时,您在intent中启动活动,因为getIntent()正在尝试返回该意图。
  • 接下来确保有一个名为&#34; routeName&#34;的字符串。并且该String不为null。

我希望这会有所帮助