小编d1r*_*1rk的帖子

ListView addHeaderView导致位置增加1?

下面是一个带有ListView的代码片段.我添加了一个emptyView和一个headerView.添加headerView会导致onItemClick中的位置增加1.

因此,如果没有headerView,第一个列表元素将具有位置0,而headerView将第一个列表元素的位置为1!

这会导致我的适配器出错,例如在调用getItem()和使用其他方法时,请参见下文.奇怪的是:在适配器的getView()方法中,即使添加了headerView,也要求第一个列表元素的位置为0!

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ListView list = (ListView) viewSwitcher.findViewById(R.id.list);
    View emptyView = viewSwitcher.findViewById(R.id.empty);
    list.setEmptyView(emptyView);

    View sectionHeading = inflater.inflate(R.layout.heading, list, false);
    TextView sectionHeadingTextView = (TextView) sectionHeading.findViewById(R.id.headingText);
    sectionHeadingTextView.setText(headerText);
    list.addHeaderView(sectionHeading);

    list.setAdapter(listAdapter);

    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            listAdapter.getItem(position);
            //Do something with it
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

一些适配器方法:

@Override
public int getViewTypeCount() {
    return TYPE_COUNT;
}

@Override
public int getItemViewType(int position) {
    return (position < items.size()) ? ITEM_NORMAL …
Run Code Online (Sandbox Code Playgroud)

android listview listadapter

95
推荐指数
7
解决办法
3万
查看次数

SharedPreferences应用程序上下文与活动上下文

我使用多个SharedPreferences在我的应用程序中存储数据.许多活动都使用了一些偏好.

我知道SharedPreferences在内部由地图支持,用于快速读取访问,并在设置更改时写入SD卡.

我想知道如果很多活动访问共享首选项哪种方式更好:

  1. 使用活动上下文在每个活动中实例化它.
  2. 在每个活动中实例化它,但使用应用程序上下文.
  3. 把它放在例如Application类中,只在那里实例化一次,类似于单例.

如果我使用1.解决方案是否有每个活动的共享首选项对象?当活动被销毁时,共享首选项的内部地图是否会被销毁?

如果我使用2.解决方案只有一个实例,虽然我在每个活动中调用getSharedPreferences?只要应用程序还活着,内部映射是否会在内存中?

希望有人知道Android如何在内部处理它.

android android-context sharedpreferences

50
推荐指数
3
解决办法
2万
查看次数

ORMLite LazyForeignCollection:如何只查询一次集合?

我们假设我有以下对象:

public class MyOwnList {

    @DatabaseField(id= true)
    protected int id;

    @ForeignCollectionField(eager = false)
    protected Collection<Item> items;
}
Run Code Online (Sandbox Code Playgroud)

items标记为惰性,如果我从数据库加载列表对象,则不会加载它.这正是我想要的!

问题是每次我访问时items,ORMLite都会进行sql查询以获取集合.只有在激活ORMLite的日志记录后才发现它...

为什么这样做?有什么好理由吗?

有什么方法可以延迟加载集合,但只有一次,而不是每次我访问集合?渴望和懒惰之间有什么关系?

ormlite

7
推荐指数
1
解决办法
1982
查看次数