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 回答