1
更新:我試圖調試它。如何從ListView中獲取點擊並着色的文本? Android
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;
}
}
我嘗試使用
String selectedItem = items.get(position);
selectedItem.setTextColor(Color.Red);
但setTextColor秀(無法解析法)
謝謝創建自定義適配器,我固定它使用getChildAt代替getItemAtPosition – user3856368