Android 获取对选中项的访问权限,并将其放置在setOnItemClickListener外部
我有一个单选择模式的列表视图,希望访问setOnItemClickListener事件之外的位置 现在,我可以访问其位置,如下所示Android 获取对选中项的访问权限,并将其放置在setOnItemClickListener外部,android,listview,position,checked,Android,Listview,Position,Checked,我有一个单选择模式的列表视图,希望访问setOnItemClickListener事件之外的位置 现在,我可以访问其位置,如下所示 final ListView lv1 = (ListView) findViewById(R.id.list); lv1.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> a
final ListView lv1 = (ListView) findViewById(R.id.list);
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position,
long id) {
//btnNxt.setEnabled(true);
Intent i = new Intent(getApplicationContext(),
NewActivity.class);
// Pass a single position
i.putExtra("position", position);
// Open SingleItemView.java Activity
startActivity(i);
}
});
Listview.xml
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:divider="#3366CC"
android:dividerHeight="2dp"
android:choiceMode="singleChoice"/>
只需创建一个成员变量(在像前面的
onCreate()
这样的方法之外声明它并使用它)
public class ...
{
int pos;
// onCreate() and such
final ListView lv1 = (ListView) findViewById(R.id.list);
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position,
long id) {
pos = position; // initialize it
...
}
});
公共类。。。
{
int pos;
//onCreate()等等
最终ListView lv1=(ListView)findViewById(R.id.list);
lv1.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(适配器视图a、视图v、内部位置、,
长id){
pos=position;//初始化它
...
}
});
然后在onClick()中使用pos
,或者在活动中需要的任何地方使用pos
如果我完全遗漏了您问题中的某些内容,请解释。您可以使用sparsebooleanarray来获取已检查的项目,如我所示yesterday@Rqaghunandan-正如您之前所述,我使用了sparsebooleanarray,正如我以前的解决方案中所述,但在我的情况下,它会为我提供null。如果您正确地编码了我的,则不会不是多选,而是单选,所以我认为使用SparseBooleanArray是没用的,如果你认为它没用的话,我不能再评论了。lucki只是在想,如果用户不点击列表项,然后点击按钮,pos将无法获得position@Raghunandan说得好!但他启用了btnNext.setEnabled(true)
注释掉了,所以我想他会取消注释那一行。我想我应该在回答中提到这一点。@coder当你点击列表项时,你得到了位置。pos得到了位置。然后你点击按钮,你可以对pos做你想做的事。你是在pos初始化为位置之前点击按钮吗?如果myPosition
是一个int
那么它在Toast
中就不起作用了。看看[文档](,int,int))。它将查找资源id
。您需要将其更改为字符串
。请参阅我们对此答案的第一条评论。您可以禁用按钮,然后在选择项目时启用它。您在那里有代码,但已注释掉,因此我认为您会理解这一点。
<?xml version="1.0" encoding="utf-8"?>
<com.example.abc.widget.CheckableRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/sampleimg"
android:layout_width="150dip"
android:layout_height="100dip"
android:paddingRight="15dp"
android:paddingLeft="15dp"/>
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginLeft="160dp"
android:layout_marginTop="10dp"
android:descendantFocusability="blocksDescendants">
<TextView android:id="@+id/itemname"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/itemdesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/carname"
android:focusable="false"/>
<TextView android:id="@+id/itemprice"
android:textSize="19sp"
android:textStyle="bold"
android:textColor="#003399"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/cardesc"/>
<com.example.abc.widget.InertCheckBox android:id="@+id/itemCheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:focusable="false"
android:button="@drawable/checkbox" />
</RelativeLayout>
</com.example.abc.widget.CheckableRelativeLayout>
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getBaseContext(),
myposition,
Toast.LENGTH_SHORT).show();
}
});
public class ...
{
int pos;
// onCreate() and such
final ListView lv1 = (ListView) findViewById(R.id.list);
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position,
long id) {
pos = position; // initialize it
...
}
});