2014-07-23 43 views
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秀(無法解析法)

回答

0

你不能這樣做,因爲selectedItemStringsetTextColor(int)適用於TextView這就是爲什麼你越來越cannot resolve method此錯誤。

對於您的要求創建,這將延長ArrayAdapterBaseAdapter行和自定義適配器類的佈局和實施getView(...) method.Give內getView(...)一個條件,任何TextView's顏色爲紅色。

教程但是,對於ListView

+0

謝謝創建自定義適配器,我固定它使用getChildAt代替getItemAtPosition – user3856368

相關問題