0

フラグメントを使用してタブレイアウトを使用するアプリがあります。2行または複数行のリストビューが必要なフラグメントの1つで、このチュートリアルに従っていますListActivity。コードをフラグメントにコピーしましたが、機能しないようです。フラグメントと2行のレイアウトのすべてのコードは、リストを表示するフラグメントのJavaクラスを除いて、上記のリンクのコードと同じです。

フラグメントのコードは次のとおりです。

package com.example.shopsellswap;

import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SimpleAdapter;

public class Fragment_My_Profile extends ListFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View myProfileView = inflater.inflate(R.layout.fragment_my_profile, container, false);


        return myProfileView;
    }

    //ArrayList holds the data (as HashMaps) to load into the ListView
        ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
        //SimpleAdapter does the work to load the data in to the ListView
        private SimpleAdapter sa;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            //HashMap links each line of data to the correct TextView
            HashMap<String,String> item;
            for(int i=0;i<StatesAndCapitals.length;i++){
              item = new HashMap<String,String>();
              item.put( "line1", StatesAndCapitals[i][0]);
              item.put( "line2", StatesAndCapitals[i][3]);
              list.add( item );
            }

            sa = new SimpleAdapter(Fragment_My_Profile.this, list,
                    R.layout.my_two_lines,
                    new String[] { "line1","line2" },
                    new int[] {R.id.line_a, R.id.line_b});

            setListAdapter(sa);
        }

        private String[][] StatesAndCapitals =
            {{"Alabama","Montgomery"},
            {"Alaska","Juneau"},
            {"Arizona","Phoenix"},
            {"Arkansas","Little Rock"},
            {"California","Sacramento"}};

私にエラーを与えている部分は

        sa = new SimpleAdapter(Fragment_My_Profile.this, list,
                R.layout.my_two_lines,
                new String[] { "line1","line2" },
                new int[] {R.id.line_a, R.id.line_b});

        setListAdapter(sa);

具体的なエラーは次のとおりです。

The constructor SimpleAdapter(Fragment_My_Profile, ArrayList<HashMap<String,String>>, int, String[], int[]) is undefined

奇妙なのは、エラーに変更ListFragmentListActivityたときにもうそこにないことです

なぜ機能しないのですか、どうすれば修正できますか?

4

1 に答える 1

1

ListFragmentはContextのサブクラスではありませんが、ListActivityはサブクラスです。このコンストラクターに何らかのタイプのコンテキストを渡す必要があります。たとえば、Activity(またはFragmentActivity)クラスの名前が次のとおりであると仮定しますMainActivity

sa = new SimpleAdapter(MainActivity.this, list, ...

このフラグメントをいつ作成するかによっては機能しない可能性があるため、すべてのコードをメソッドに移動して次onCreate()onActivityCreated()使用できます。

sa = new SimpleAdapter(getActivity(), list, ...
于 2012-12-15T06:04:44.423 に答える