0

当用户单击 ListView 的项目时,我会在此列表项目上显示编辑按钮。lastSelectedPosition具有最后单击的列表项的位置。

代码:

public class MainActivity extends Activity {
    private ListView listView;
    private MyAdapter adapter;

    // static - If the activity is re-created, the data
    // about list items remain.
    private static List<String> items = loadItems();

    private MyItemClickListener listener = new MyItemClickListener();
    private int lastSelectedPosition = ListView.INVALID_POSITION;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        listView = (ListView) findViewById(R.id.myListView);
        adapter = new MyAdapter(R.layout.my_item, items);
        listView.setAdapter(adapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        listView.setOnItemClickListener(listener);

        if (savedInstanceState != null) {
            // Is recreating the activity because 
            // of the change screen orientation. 

            lastSelectedPosition = savedInstanceState.getInt("lastSelectedPos");
            if (lastSelectedPosition != ListView.INVALID_POSITION) {
                // !!! getChildAt() always returns null !!!
                View listItem = listView.getChildAt(lastSelectedPosition);
                View editButton = listItem.findViewById(R.id.editButton);

                // Only selected list item has visible EditButton, 
                // other list items have not
                editButton.setVisibility(View.VISIBLE);
            }
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // Is destroying the activity because 
        // of the change screen orientation.

        outState.putInt("lastSelectedPos", lastSelectedPosition);               
    }

    // Other methods
}

我认为getChildAt()总是返回nullActivity.onCreate()因为那时列表还没有完全开发。如何获取View列表项以在其上显示编辑按钮?

对不起我的英语。

谢谢

4

2 回答 2

1

您的适配器需要知道这个选定的位置,以便它可以在getView(). 只需修改适配器的构造函数以获取 int,并在调用 onclick 时更新该 int 值。通常,您应该始终拥有在适配器中重新创建列表项状态所需的所有信息。

于 2013-04-06T14:30:51.627 回答
0

lastSelectedPosition我认为这是因为当用户单击列表视图中的项目时,您没有更改您的值。只需onItemClickListener像下面的代码片段那样实现您的。并改变你lastSelectedPosition的价值。并删除你的

private MyItemClickListener listener = new MyItemClickListener(); 

线。我认为在定义变量lastSelectedPosition之前无法更改的值。listener而且我不知道你在哪里定义你的listener变量。

lv1.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
lastSelectedPosition = arg2
}
});

我希望这能帮到您。

于 2013-04-06T12:00:57.310 回答