我创建了一个带有 fragment 的 ListView ,但是有一些问题。检查下图。
它仅在屏幕旋转时发生。我的代码如下:
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/