Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android listview 如何在单击时从ListView获取文本并为其着色?安卓_Android Listview - Fatal编程技术网

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);