0

それぞれの Asynctasker からデータを描画することを除いて、2 つのほぼ同一の ListFragment A & Bがあります。

Aで onListItemClick を実行すると、フラグメントAがBに置き換えられます。ただし、私のアプリは常にBの CustomAdapter のコンストラクターでスタックします。

private class CustomAdapter_B extends ArrayAdapter<MatchType> {
            // Stuck Here
            CustomAdapter_B() {
                super(getActivity(), R.layout.color_match_type_s2, matches_type_s2);
            }

フラグメントA

    public class Fragment A extends ListFragment implements AsyncTaskCompleteListener<ArrayList<MatchType>>{

        ArrayList<MatchType> matches_type = new ArrayList<MatchType>();
        private ProgressDialog dialog;
        private static FirstPageFragmentListener main_caller;


        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
                    //Interface, triggering Fragment Replace in my Fragment Adapter
            main_caller.onMySignalWithNum(1, (matches_type.get(position).getLink()));
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            this.dialog.show();
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
// AsyncTasker to draw data for ArrayAdapter
LoadMatchType lmt = new LoadMatchType(this);
            lmt.execute();
        }

        @Override
        public void onTaskComplete(ArrayList<MatchType> result) {
            dialog.dismiss();       
            //result.remove(result.size()-1);
            matches_type = result;

            setListAdapter(new CustomAdapter());
            }
        }

        //Custom Adapter
        private class CustomAdapter extends ArrayAdapter<MatchType> {
            CustomAdapter() {
                super(getActivity(), R.layout.color_match_type, matches_type);
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                View row = convertView;

                if (row == null) {
                    LayoutInflater inflater = getActivity().getLayoutInflater();
                    row = inflater.inflate(R.layout.color_match_type, parent, false);
                }

                TextView tv_type = (TextView) row.findViewById(R.id.textView_type);
                tv_type.setText(matches_type.get(position).getType());

                TextView tv_tweet = (TextView) row.findViewById(R.id.textView_tweet);
                tv_tweet.setText(matches_type.get(position).getTweet());

                TextView tv_tph = (TextView) row.findViewById(R.id.textView_tph);
                tv_tph.setText(matches_type.get(position).getTph());

                return row;
            }   
        }

        public static Fragment newInstance(
                FirstPageFragmentListener pageFragmentListener) {
            // TODO Auto-generated method stub
            footOddsFragment frag = new footOddsFragment();
            main_caller = pageFragmentListener;
            return frag;    
            }   
    }


    //INTERFACE
    interface AsyncTaskCompleteListener<T> {
           public void onTaskComplete(ArrayList<MatchType> result);
    }

フラグメントBはほぼ同じです。

アプリはフラグメント B の CustomAdapter コンストラクターでスタックし、画面は空白になります。

ああ、フラグメントBを放棄し、フラグメントAの onListItemClick で Asynctasker_B を呼び出すと、すべて正常に動作します。前のリストを表示するために戻ることはできません。

4

1 に答える 1

0

フラグメント B は忘れてください。バック プレスをオーバーライドしif、そこに を入れて、リスト B がアクティブかどうかを判断します。リスト B がアクティブである場合は元に戻し、そうでない場合は通常のバック機能を実行します。

public void onBackPressed() {
    //  Code here to change list or go back.
    return;
}
于 2012-06-27T15:40:51.340 に答える