android - Android 上存在 fragment 问题的 ListView

标签 android android-fragments fragment android-listfragment

我创建了一个带有 fragment 的 ListView ,但是有一些问题。检查下图。

Enter image description here

它仅在屏幕旋转时发生。我的代码如下:

public class LListFragment extends SherlockListFragment {

    private String[] line;

    public static final String[] TITLES = { "Henry IV (1)", "Henry V",
            "Henry VIII", "Richard II", "Richard III", "Merchant of Venice",
            "Othello", "King Lear" };

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

        setListAdapter(new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, TITLES));
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        Intent intent = new Intent(getActivity(), lineDetail.class);
        intent.putExtra("selected_line", "" + TITLES[position]);

        startActivity(intent);
        super.onListItemClick(l, v, position, id);
    }

}

我该如何解决这个问题?

最佳答案

我正在使用 ListFragment 进行类似的布局,但我没有遇到这个问题。尝试为您的列表项使用您自己的 Adapter。像这样

public class MyAdapter extends BaseAdapter {
    @SuppressWarnings("unused")
    private static final String TAG = MyAdapter.class.getSimpleName();

    private List<String> _items;
    private LayoutInflater inflater;

    public MyAdapter(List<String> items, Context context) {
        _items = items;
        inflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return (_items != null) ? _items.size() : 0;
    }

    public Object getItem(int position) {
        return (_items != null) ? _items.get(position) : null;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.your_item_layout, null);
        }

        ((TextView)convertView.findViewById(R.id.itemText)).setText(_items.get(position));

        return convertView;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }


    public synchronized void refresAdapter(List<String> items) {
        _items.clear();
        _items.addAll(items);
        notifyDataSetChanged();
    }
}

--- 编辑 ---

这是我的 ListFragment

的代码
public class HomeListFragment extends ListFragment implements DataListener {

    private MyAdapter _adapter;
    private Context _ctx;

    public HomeListFragment(){}

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

        initialize();
    }

    private void initialize() {
        _adapter = new MyAdapter(new List<String>(), _ctx);

        setListAdapter(_adapter);

        final SomeServiceHandler s = new SomeServiceHandler(_ctx, HomeListFragment.this);
        s.request(RequestType.GETSOMEDATA, "");
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        //do stuff
    }

    /**
    * Listener method that is invoked by SomeServiceHandler
    */
    public void onResponseRecieved(List<String> responseList) {
        _adapter.refresAdapter(responseList);
    }
}

我唯一能看到我做的与你不同的是,我在通过调用 SomeServiceHandler 类再次创建 Activity 后刷新我的适配器,然后刷新响应在 onResponseRecieved 方法中。

关于android - Android 上存在 fragment 问题的 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16977803/

相关文章:

android - fragment 垃圾收集

android - RecyclerView#onMeasure() 没有通过调用 setMeasuredDimension() 设置测量维度

android - 没有默认翻译并且不会生成 R

android - request.auth.uid 中会有什么?

android - fragment与activity之间的通信

android - 在 Android Fragments 中维护返回堆栈

android - 获取错误 : fragment already added?

android - 触摸 infoWindow 适配器时删除突出显示

java - 如何通过点击FAB按钮获取id

java - 在抽屉导航项目单击上切换 fragment