Android:在viewPager中从Fragment调用ListView&的适配器的getview()

时间:2015-09-03 03:42:20

标签: java android android-fragments android-listview android-viewpager

我的ViewPager包含3个不同的Fragment。每个Fragment包含不同的ViewListView,当我尝试在ListView Fragment中显示ViewPager时出现问题它没有显示任何东西。我已尝试调试adapter,但似乎未调用getView()方法。我尝试从ViewPager调用我的片段,结果是从适配器调用getView()并显示ListView。是否有ListView来自ViewPager?我已经尝试this solutiononViewCreated()调用我的适配器,但是没有任何变化。所以我的方法有什么问题吗?这是我的代码:

我的用于管理ViewPager的片段类

public class Frag_Provider extends Fragment {
    private String[] tabsTitles = {"TERDEKAT", "SEMUA", "PROVIDERKU"};
    String url = "";
    List<ModelProvider> list_provider;
    DB_Esehat db_esehat = null;
    SQLiteDatabase db = null;
    ContentLoadingProgressBar progressbar;
    TabLayout tabLayout;
    ViewPager pager;
    public Frag_Provider (){

    }
    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        ((MainActivity) getActivity()).custom_toolbar("Provider", R.color.toolbar_provider, R.color.toolbar_provider_dark);
        View result=inflater.inflate(R.layout.fragment_provider, container, false);

        list_provider = new ArrayList<ModelProvider>();
        progressbar = (ContentLoadingProgressBar)result.findViewById(R.id.progressbar);

        db_esehat = new DB_Esehat(getActivity());
        db = db_esehat.getWritableDatabase();
        db.delete("LST_PROVIDER", null, null);

        pager=(ViewPager)result.findViewById(R.id.pager);

        tabLayout = (TabLayout)result.findViewById(R.id.sliding_tabs);

        url = getResources().getString(R.string.url_host)+getResources().getString(R.string.url_provider);
        new ProviderTask(url).execute();

        pager.setAdapter(buildAdapter(tabsTitles));

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                tabLayout.setupWithViewPager(pager);
            }
        });

        return(result);
    }
    public class ProviderTask extends AsyncTask<String, Void, String> {
        String url = "";

        public ProviderTask(String url) {
            this.url = url;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressbar.setVisibility(View.VISIBLE);
        }

        @Override
        protected String doInBackground(String... params) {

            String result = "";
            try {
                result = Connection.get(url);
            } catch (Exception e) {

                result = "";
            }
            return result;
        }

        @Override
        protected void onPostExecute(String result) {
            progressbar.setVisibility(View.GONE);
            pager.setVisibility(View.VISIBLE);
            tabLayout.setVisibility(View.VISIBLE);

            super.onPostExecute(result);
            if (result.equals("") || result.equals(null)) {
                MethodSupport.AlertDialog(getActivity());
            } else {
                try {
                    JSONArray Data = new JSONArray(result);

                    for (int i = 0; i < Data.length(); i++) {
                        String LSKA_NOTE = "";
                        String  RSALAMAT = "";
                        String  RSTELEPON = "";
                        String  RSNAMA = "";
                        String  MAPPOS = "";
                        int  RSTYPE = 0;
                        int  RSID = 0;
                        int  RS_NTT = 0;
                                JSONObject json = Data.getJSONObject(i);
                        if (json.has("LSKA_NOTE")) {
                            LSKA_NOTE = json.getString("LSKA_NOTE");
                        }
                        if (json.has("RSALAMAT")) {
                            RSALAMAT = json.getString("RSALAMAT");
                        }
                        if (json.has("RSTELEPON")) {
                            RSTELEPON = json.getString("RSTELEPON");
                        }
                        if (json.has("RSNAMA")) {
                            RSNAMA = json.getString("RSNAMA");
                        }
                        if (json.has("MAPPOS")) {
                            MAPPOS = json.getString("MAPPOS");
                        }
                        if (json.has("RSTYPE")) {
                            RSTYPE = json.getInt("RSTYPE");
                        }
                        if (json.has("RSID")) {
                            RSID = json.getInt("RSID");
                        }
                        if (json.has("RS_NTT")) {
                            RS_NTT = json.getInt("RS_NTT");
                        }
                        db_esehat.InsertRS(LSKA_NOTE, RSALAMAT, RSTELEPON, RSNAMA, MAPPOS, RSTYPE, RSID, RS_NTT);
                    }
                } catch (Exception e) {
                    Log.d("TES", e.getMessage());
                }

            }
        }
    }


    private PagerAdapter buildAdapter(String[] tabsTitles) {
        return(new FragmentStatePagerAdapter(getActivity(), getChildFragmentManager(),tabsTitles));
    }

}

这是FragmentStatePagerAdapter.java

    public class FragmentStatePagerAdapter  extends FragmentPagerAdapter {
    Context ctxt=null;
    private String[] tabsTitles;

    public FragmentStatePagerAdapter(Context ctxt, FragmentManager mgr, String[] tabsTitles) {
        super(mgr);
        this.ctxt=ctxt;
        this.tabsTitles = tabsTitles;
    }

    @Override
    public int getCount() {
        return tabsTitles.length;
    }

    @Override
    public Fragment getItem(int position) {
        switch(position) {
            case 0:
                return Frag_Provider_Terdekat.newInstance(position);
            case 1:
                return Frag_Provider_Semua.newInstance(position);
            case 2:
                return Frag_Provider_Ku.newInstance(position);
        }

        return null;
    }
//    @Override public float getPageWidth(int position) { return(0.7f); }
    @Override
    public String getPageTitle(int position) {
        return tabsTitles[position];
    }
}

这是我的Fragment_Provider.xml,用于管理ViewPager的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <android.support.v4.widget.ContentLoadingProgressBar
        android:id="@+id/progressbar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:visibility="gone"
        android:indeterminate="false" />

    <android.support.design.widget.TabLayout
        android:id="@+id/sliding_tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMaxWidth="0dp"
        app:tabGravity="fill"
        style="@style/MyCustomTabLayout"
        app:tabMode="fixed"
        android:fillViewport="true"
        android:visibility="gone" />

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:background="@android:color/white"
        android:layout_below="@id/sliding_tabs"
        android:visibility="gone"/>

</RelativeLayout>

这是ViewPager中包含ListView

的片段
public class Frag_Provider_Terdekat extends Fragment {
    private static final String KEY_POSITION="position";
    private ListView list_provider;
    List<ModelProviderTerdekat> list_ekamedicare;
    DB_Esehat db_esehat;
    SQLiteDatabase db;
    ProviderTerdekatAdapter adapter;

    static Frag_Provider_Terdekat newInstance(int position) {
        Frag_Provider_Terdekat frag=new Frag_Provider_Terdekat();
        Bundle args=new Bundle();

        args.putInt(KEY_POSITION, position);
        frag.setArguments(args);

        return(frag);
    }

    static String getTitle(Context ctxt, int position) {
        return("PROVIDER KU");
    }

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        View result=inflater.inflate(R.layout.fragment_child_providerterdekat, container, false);
        list_provider = (ListView)result.findViewById(R.id.list_provider);
        list_ekamedicare = new ArrayList<ModelProviderTerdekat>();
        db_esehat = new DB_Esehat(getActivity());
        list_ekamedicare = db_esehat.getProvider();
        adapter = new ProviderTerdekatAdapter(getActivity().getApplicationContext(), R.layout.adapter_provider, list_ekamedicare);
        list_provider.setAdapter(adapter);
        return result;
    }
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }
}

这是Adapter

ListView
    public class ProviderTerdekatAdapter extends ArrayAdapter<ModelProviderTerdekat> {
    List<ModelProviderTerdekat> data = Collections.emptyList();
    private LayoutInflater inflater;
    private Context context;

    static class ViewHolder {
        ImageView imvprov_map;
        ImageView imvprov_fav;
        TextView textprov_nama_rs;
        TextView textprov_alamat_rs;
        TextView textprov_km_rs;
    }
    public ProviderTerdekatAdapter (Context context, int viewResourceId, List<ModelProviderTerdekat> data) {
        super(context, R.layout.adapter_provider, data);
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.data = data;
    }
    @Override
     public int getCount() {
        return data.size();
    }

    @Override
      public long getItemId(int arg0) {
        return 0;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        if (view == null) {
            view = inflater.inflate(R.layout.adapter_provider, parent, false);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.imvprov_map = (ImageView) view.findViewById(R.id.imvprov_map);
            viewHolder.imvprov_fav = (ImageView) view.findViewById(R.id.imvprov_fav);

            viewHolder.textprov_nama_rs = (TextView) view.findViewById(R.id.textprov_nama_rs);
            viewHolder.textprov_alamat_rs = (TextView) view.findViewById(R.id.textprov_alamat_rs);
            viewHolder.textprov_km_rs = (TextView) view.findViewById(R.id.textprov_km_rs);
            view.setTag(viewHolder);
        }
        ViewHolder viewHolder = (ViewHolder) view.getTag();

        viewHolder.textprov_nama_rs.setText(data.get(position).getRSNAMA());
        viewHolder.textprov_alamat_rs.setText(data.get(position).getRSALAMAT());

        return view;
    }
}

我不知道为什么GetView()未在Adapter中调用,是因为我放入了ViewPager?我希望有人了解它并帮助我解决我的问题。非常感谢你。

1 个答案:

答案 0 :(得分:0)

最后..我找到了解决问题的方法,因为我在ViewPager中将RelativeLayout放入LinearLayout后,根据我的意愿显示所有视图

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <android.support.v4.widget.ContentLoadingProgressBar
        android:id="@+id/progressbar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:visibility="gone"
        android:indeterminate="false" />

    <android.support.design.widget.TabLayout
        android:id="@+id/sliding_tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMaxWidth="0dp"
        app:tabGravity="fill"
        style="@style/MyCustomTabLayout"
        app:tabMode="fixed"
        android:fillViewport="true"
        android:visibility="gone" />

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:background="@android:color/white"
        android:layout_below="@id/sliding_tabs"
        android:visibility="gone"/>

</LinearLayout>