0

クラスを拡張できListFragmentません。 ClassCastException エラーが発生します。コードは拡張中にListActivity機能していました。また、Fagment の拡張中にも機能します (リストが使用されていない場合)。しかし、ListFragment でエラーが発生し、解決策が見つかりませんでした。それを解決する方法はありますか?ListFragment/ListActivity を拡張する内部クラスが問題を解決するかもしれませんが、私はそれを達成できませんでした。

アダプターを設定したい:

setListAdapter(Adapter<String>(this, R.layout.row));
m_List = (ArrayAdapter<String>)getListAdapter();

xml

<ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    <TextView
        android:id="@+id/android:empty"
        android:text=""
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"/>

アクティビティ

public class MyActivity extends Fragment  {

    public class MyListFragment extends ListActivity {        
               @Override
            public void onCreate(Bundle savedInstanceState) {
                   super.onCreate(savedInstanceState);    
                setContentView(R.layout.stopwatch);
    setListAdapter(new ArrayAdapter<String>(this, R.layout.row));               
             m_List = (ArrayAdapter<String>)getListAdapter();

          }

     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            v = inflater.inflate(R.layout.stopwatch, container, false);
    MyListFragment ma = new MyListFragment();  // ???
    }

    }
4

2 に答える 2

4

次に使用するListActivity場合:

 public class MyListActivity extends ListActivity {
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
        "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
        "Linux", "OS/2" };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
  }
} 

フラグメントではなくフラグメントのListFragment場合

public class CountryList extends ListFragment {

    String[] countries = new String[] {
        "India",
        "Pakistan",
        "Sri Lanka",
        "China",
        "Bangladesh",
        "Nepal",
        "Afghanistan",
        "North Korea",
        "South Korea",
        "Japan"
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        /** Creating an array adapter to store the list of countries **/
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(inflater.getContext(), android.R.layout.simple_list_item_1,countries);

        /** Setting the list adapter for the ListFragment */
        setListAdapter(adapter);

        return super.onCreateView(inflater, container, savedInstanceState);
    }
}
于 2013-05-01T12:12:29.280 に答える
0

ListFragment という新しいクラスを作成し、コードを移行します。

基本的なシナリオのステップ バイ ステップ ガイドを次に示します。

1)フラグメントの非常に単純な実装を使用して、新しいfragment.javaファイルを作成します。

package com.a;

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.ListView;

public class MenuFragment extends ListFragment 
{

public static final String TAG = "MenuFragment";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.list, null);
    return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    //
    // insert code here to setup and call setListAdapter()
    //
}

@Override
public void onListItemClick(ListView lv, View v, int position, long id) 
{

}
}

2) listactivity コードで setContentView を探し、そのレイアウトを onCreateView() の下の inflate() 呼び出しのパラメーターとして使用します。

setContentView(R.layout.main);

View v = inflater.inflate(R.layout.main, null);

3)残りのコードを listactivity onCreate() の下にある listfragmentt OnCreateView() に移動します。おそらく、次のようなコントロールを設定するコードがいくつかあります。

text = (EditText) this.findViewById(R.id.text);

これは次のようになります。

text = (EditText) v.findViewById(R.id.text);

v はビューであり、inflate 呼び出しから返されることに注意してください。

4) コードに「this」への参照がある場合、エラーが発生します。それを「getActivity()」に置き換えます。

5)残っているコードを確認し、それらを新しいファイルに配置する適切な場所を見つけます。うまくいけば、上記は基本をカバーしています。

于 2014-01-07T15:57:04.867 に答える