[英]Get ListView text and position on button click
我知道这个问题是4年前提出的,但是没有一个答案对我有帮助。 我正在遵循一本书(Apress的Android Pro 5),试图使该项目正常工作。 但是,强制性书已过时。
我有一个简单的ListView ,底部有一个按钮。 每个列表视图项旁边都有一个复选框。 单击该按钮时,应该说“已在位置检查ListView”。
一切都在视觉上加载,一切正常。 但是,当我按照本书的说明进行操作时,该按钮什么也没做。 当我从按钮单击文章的“ 获取列表视图”项位置遵循任何说明时,单击按钮时应用程序崩溃。 请注意,下面的代码就是我拥有的一切。 没有其他方法或其他任何方法。 这是我的代码:
//代码设置的主要部分
public class MainActivity extends AppCompatActivity {
private ListView listView1;
private Button button1;
private ArrayAdapter<String> listAdapter1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView1 = (ListView) findViewById(R.id.listView1);
String[] someColors = new String[]{"Red", "Orange", "Yellow", "Green",
"Blue", "Indigo", "Violet", "Black", "White"};
ArrayList<String> colorArrayList = new ArrayList<String>();
colorArrayList.addAll(Arrays.asList(someColors));
listAdapter1 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, colorArrayList);
listView1.setAdapter(listAdapter1);
//添加复选框
listView1.setChoiceMode(listView1.CHOICE_MODE_MULTIPLE);
//这是列表视图的onItemClickListener
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
String itemValue = (String)
listView1.getItemAtPosition(position);
Toast.makeText(getApplicationContext(), itemValue,
Toast.LENGTH_LONG).show();
}
});
}
//这里是根本没有响应的动作。 从字面上看,它在运行时不会发生任何事情。
public void doClick(View view) {
int count = listView1.getCount();
SparseBooleanArray viewItems = listView1.getCheckedItemPositions();
for (int i = 0; i < count; i++) {
if(viewItems.get(i)){
String selectColor = (String)listView1.getItemAtPosition(i);
Log.v("List View", selectColor + "is checked at position" + i);
}
}
}
而且很好,这是我的XML:
<LinearLayout
android:layout_width="368dp"
android:layout_height="492dp"
android:orientation="vertical"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp">
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="62dp"
android:text="@string/sub"
android:onClick="doClick"
/>
</LinearLayout>
将以下行从
@Override
public void onItemClick (AdapterView < ? > parent, View view, int
position,long id){
String itemValue = (String)
listView1.getItemAtPosition(position);
Toast.makeText(getApplicationContext(), itemValue,
Toast.LENGTH_LONG).show();
}
});
至
@Override
public void onItemClick (AdapterView < ? > parent, View view, int
position,long id){
String itemValue = colorArrayList.get(position);
Toast.makeText(getApplicationContext(), itemValue,
Toast.LENGTH_LONG).show();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.