Android listview 如何在单击时从ListView获取文本并为其着色?安卓
更新:我是通过试着调试得到的Android listview 如何在单击时从ListView获取文本并为其着色?安卓,android-listview,Android Listview,更新:我是通过试着调试得到的 07-23 02:35:43.573 10022-10022/com.mouath.mytodolist E/MessageQueue-JNI﹕ java.lang.ClassCastException: java.lang.String cannot be cast to android.widget.TextView 我知道如何给它上色,但我的应用程序被迫关闭 TextView selectedItem = (TextView)(lvItems.getIte
07-23 02:35:43.573 10022-10022/com.mouath.mytodolist E/MessageQueue-JNI﹕ java.lang.ClassCastException: java.lang.String cannot be cast to android.widget.TextView
我知道如何给它上色,但我的应用程序被迫关闭
TextView selectedItem = (TextView)(lvItems.getItemAtPosition(position));
这是我的代码片段——我试图尽可能地减少它,并与问题保持关联
public class Todo extends Activity {
// Creating Array list, adapter ... getting a handle to list view and attaching it
ArrayList<String> items;
ArrayAdapter<String> itemsAdapter;
ListView lvItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todo);
//defining lvItems
lvItems = (ListView) findViewById(R.id.lvItems);
//defining items as array list
items = new ArrayList<String>();
readItems();
itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
lvItems.setAdapter(itemsAdapter);
//setting up a new listener for removing items
//setupListViewListener();
registerForContextMenu(lvItems);
}
//ContextMenu stuff
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, view, menuInfo);
/*
Menu Title & Options
*/
menu.setHeaderTitle(getString(R.string.select_option));
menu.add(0, view.getId(), 0, R.string.remove_option);
menu.add(0, view.getId(), 1, R.string.edit_option);
menu.add(0, view.getId(), 2, R.string.complete_option);
menu.add(0, view.getId(), 3, R.string.color_option);
menu.add(0, view.getId(), 4, R.string.share_option);
}
// When Item is selected call
@Override
public boolean onContextItemSelected(MenuItem item){
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int position = info.position;
/*
if statements for each options in context menu
*/
if(item.getOrder()==0){ //0 item = remove
// assign temp variable to the position of item selected
String selectedItem = items.get(position);
// remove the item
items.remove(selectedItem);
// notify user using a toast
Toast.makeText(this, R.string.removed_toast, Toast.LENGTH_SHORT).show();
// update items view
itemsAdapter.notifyDataSetChanged();
// update items on file when item is removed
saveItems();
}
else if(item.getOrder()==1){ // 1 item = edit
Toast.makeText(this, "Edit Option Chosen", Toast.LENGTH_SHORT).show();
// Edit Code goes HERE
}
else if(item.getOrder()==2){ //2 item = Complete
/* TO BE IMPLEMENTED LATER
// Completed Code goes here
//Toast.makeText(this, "Completed Option Chosen", Toast.LENGTH_SHORT).show();
//STOPSHIP
//TextView selectedItem2 = (TextView)(lvItems.getItemAtPosition(position));
String selectedItem = lvItems.getItemAtPosition(position).toString();
SpannableString content = new SpannableString(selectedItem);
//selectedItem2.setPaintFlags(selectedItem2.setPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
content.setSpan(new StrikethroughSpan(), 0, selectedItem.length(), 0);
itemsAdapter.add(content.toString());
itemsAdapter.notifyDataSetChanged();
saveItems();
Toast.makeText(this, content, Toast.LENGTH_SHORT).show();
//TextView selectedItem2 = (TextView) (lvItems.getItemAtPosition(info.position));
//selectedItem.setPaintFlags(selectedItem.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
//itemsAdapter.notifyDataSetChanged();
//saveItems();
*/
}
else if(item.getOrder()==3){ //3 item = color
// Color Code Goes here
Toast.makeText(this, "Color Option Chosen", Toast.LENGTH_SHORT).show();
TextView selectedItem = (TextView)(lvItems.getItemAtPosition(position));//BreakPoint Here shows that app crash on this line -- No idea why
selectedItem.setTextColor(Color.RED);
}
else if(item.getOrder()==4) { //4 item = share
// Share Code Goes here
Toast.makeText(this, "Share Option Chosen", Toast.LENGTH_SHORT).show();
}
return true;
}
}
但是setTextColor show无法解析方法您不能这样做,因为selectedItem是一个字符串,适用于TextView,这就是为什么您得到的方法无法解析此错误
根据您的需求,为行和自定义适配器类创建布局,该类将扩展ArrayAdapter或BaseAdapter并实现getView。。。方法。在getView中提供一个条件。。。因此,任何TextView的颜色都将为红色
为ListView创建自定义适配器的教程
谢谢,但是我用getChildAt而不是getItemAtPosition修复了它
String selectedItem = items.get(position);
selectedItem.setTextColor(Color.Red);