Android无法突出显示listview中的项目

Android无法突出显示listview中的项目,android,listview,android-listview,Android,Listview,Android Listview,我试图突出显示listview中的一个项目,所以当用户单击listview中的一个项目时,会启动一个新活动,并且listview中的特定项目会突出显示 我知道这可以用片段完成,但我更喜欢活动,因为它使我的工作更容易 这里是自定义适配器 public class CustomAdapter extends BaseAdapter{ Context mycontext; ArrayList<String> contactsList; LayoutInflater

我试图突出显示listview中的一个项目,所以当用户单击listview中的一个项目时,会启动一个新活动,并且listview中的特定项目会突出显示

我知道这可以用片段完成,但我更喜欢活动,因为它使我的工作更容易

这里是自定义适配器

public class CustomAdapter extends BaseAdapter{

    Context mycontext;
    ArrayList<String> contactsList;
    LayoutInflater minflater;

    public CustomAdapter(Context context, ArrayList<String> list)
    {
        this.mycontext=context;
        contactsList=list;
        minflater =LayoutInflater.from(context);

    }
    @Override
    public int getCount()
    {
        return contactsList.size();
    }


    @Override
    public Object getItem(int position)
    {
        return contactsList.get(position);
    }


    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }


    @Override
    public View getView(int position,View convertView,ViewGroup parent)
    {
        View v=convertView;

        if (convertView !=null)
        {
            LayoutInflater inflater=(LayoutInflater) mycontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v =inflater.inflate(R.layout.item_layout,null);

            TextView tv=(TextView)v.findViewById(R.id.itemName);

            if (position ==1)
            {
                convertView.setBackgroundColor(Color.BLUE);

            }
        }
        return  convertView;
    }
}
如果listview位置索引为1,我尝试将项目膨胀并以蓝色突出显示textview。我做错了什么

编辑2:

 1810-1810/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.listviewandroid, PID: 1810
    java.lang.NullPointerException
            at android.widget.AbsListView.obtainView(AbsListView.java:2265)
            at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
            at android.widget.ListView.onMeasure(ListView.java:1175)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
            at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1052)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:590)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
            at android.view.Choreographer.doCallbacks(Choreographer.java:574)
            at android.view.Choreographer.doFrame(Choreographer.java:544)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
编辑3:主要活动代码

package com.example.listviewandroid;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import android.text.format.Time;
import java.util.Date;

public class MainActivity extends Activity {
    ListView listView ;
    static final  String STE = "";
    static final String STM = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState !=null)
        {
            restoreState(savedInstanceState);
        }
        listView = (ListView) findViewById(R.id.listView);

        TextView textviewmenu= (TextView) findViewById(R.id.textViewMenu);
        textviewmenu.setBackgroundColor(Color.rgb(89,89,89));
        textviewmenu.setTextColor(Color.WHITE);

        String[] values = getResources().getStringArray(R.array.menuList);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, values);


        // Assign adapter to ListView
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

                // ListView Clicked item index
                int itemPosition     = position;

                // ListView Clicked item value
                String  itemValue    = (String) listView.getItemAtPosition(position);


                // Show Alert

                switch( position )
                {

                    case 1:  Intent newActivity = new Intent(MainActivity.this,Activity2.class);
                        startActivity(newActivity);
                        break;

                    case 2:  Intent newActivity1 = new Intent(MainActivity.this,Activity3.class);
                        startActivity(newActivity1);
                        break;
                    case 3:  Intent newActivity2 = new Intent(MainActivity.this,Activity4.class);
                        startActivity(newActivity2);
                        break;
                    case 4:  Intent newActivity3 = new Intent(MainActivity.this,Activity5.class);
                        startActivity(newActivity3);
                        break;
                    case 5:  Intent newActivity4 = new Intent(MainActivity.this,Activity6.class);
                        startActivity(newActivity4);
                        break;

                }
                Toast.makeText(getApplicationContext(),
                        "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG)
                        .show();

            }

        });
        Time now = new Time();
        now.setToNow();
        if (savedInstanceState ==null )
        {
        TextView textview2= (TextView)findViewById(R.id.MAtextView2);
        textview2.setText(now.hour+" : "+now.minute);
        }


    }


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);


        TextView startimetext= (TextView) findViewById(R.id.MAtextView2);
        outState.putString(STE,startimetext.getText().toString());



        TextView endtimetext= (TextView) findViewById(R.id.MAtextView3);
        outState.putString(STM,startimetext.getText().toString());


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void SetEndTime(View view) {
        Time now = new Time();
        now.setToNow();
        TextView textview3= (TextView)findViewById(R.id.MAtextView3);
        textview3.setText(now.hour+" : "+now.minute);

    }

    public void NextActivity(View view) {
        Intent myIntent = new Intent(MainActivity.this,Activity2.class);
       MainActivity.this.startActivity(myIntent);
        this.overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);

    }

    private void restoreState(Bundle savedInstanceState) {
        TextView startimetext= (TextView) findViewById(R.id.MAtextView2);

        TextView endtimetext= (TextView) findViewById(R.id.MAtextView3);


      startimetext.setText(savedInstanceState.getString(STE));
      endtimetext.setText(savedInstanceState.getString(STM));



    }
}
package com.example.listviewandroid;
导入android.content.Intent;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.Menu;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
导入android.text.format.Time;
导入java.util.Date;
公共类MainActivity扩展了活动{
列表视图列表视图;
静态最终字符串STE=“”;
静态最终字符串STM=“”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
如果(savedInstanceState!=null)
{
恢复性房地产(savedInstanceState);
}
listView=(listView)findViewById(R.id.listView);
TextView textviewmenu=(TextView)findViewById(R.id.textviewmenu);
textviewmenu.setBackgroundColor(Color.rgb(89,89,89));
textviewmenu.setTextColor(Color.WHITE);
String[]values=getResources().getStringArray(R.array.menuList);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,android.R.id.text1,值);
//将适配器分配给ListView
setAdapter(适配器);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//ListView单击的项目索引
int itemPosition=位置;
//ListView单击的项目值
String itemValue=(String)listView.getItemAtPosition(position);
//显示警惕
开关(位置)
{
案例1:Intent newActivity=newintent(MainActivity.this,Activity2.class);
星触觉(新活动);
打破
案例2:Intent newActivity1=新Intent(MainActivity.this,Activity3.class);
startActivity(新活动1);
打破
案例3:Intent newActivity2=新Intent(MainActivity.this,Activity4.class);
startActivity(新活动2);
打破
案例4:Intent newActivity3=新的Intent(MainActivity.this,Activity5.class);
startActivity(新活动3);
打破
案例5:Intent newActivity4=新的Intent(MainActivity.this,Activity6.class);
startActivity(新活动4);
打破
}
Toast.makeText(getApplicationContext(),
位置:“+itemPosition+”列表项:“+itemValue,Toast.LENGTH\u LONG)
.show();
}
});
现在时间=新时间();
现在,setToNow();
如果(savedInstanceState==null)
{
TextView textview2=(TextView)findViewById(R.id.MAtextView2);
textview2.setText(now.hour+:“+now.minute);
}
}
@凌驾
SaveInstanceState上受保护的无效(束超出状态){
super.onSaveInstanceState(超出状态);
TextView startimetext=(TextView)findViewById(R.id.MAtextView2);
putString(STE,startimetext.getText().toString());
TextView endtimetext=(TextView)findViewById(R.id.MAtextView3);
putString(STM,startimetext.getText().toString());
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共void SetEndTime(视图){
现在时间=新时间();
现在,setToNow();
TextView textview3=(TextView)findViewById(R.id.MAtextView3);
textview3.setText(now.hour+:“+now.minute);
}
公共空间无接触性(视图){
Intent myIntent=新的Intent(MainActivity.this、Activity2.class);
MainActivity.this.startActivity(myIntent);
这个.overridePendingTransition(android.R.anim.slide\u in\u left,android.R.anim.slide\u out\u right);
}
私有财产(捆绑保存状态){
TextView startimetext=(TextView)findViewById(R.id.MAtextView2);
TextView endtimetext=(TextView)findViewById(R.id.MAtextView3);
startimetext.setText(savedInstanceState.getString(STE));
setText(savedInstanceState.getString(STM));
}
}
  • if(convertView!=null)
    更改为
    if(convertView==null)
    当您没有可重用的视图时,需要对布局进行充气

  • 您需要在listview上添加一个单击侦听器,以突出显示特定的行/列表项。下面是如何添加单击侦听器。更新您的视图以突出显示它

    lv.setOnItemClickListener(新的OnItemClickListener(){

    @覆盖
    public void onItemClick(AdapterView父视图、视图、整型位置、,
    长id){
    意向意向=新意向(MainActivity.this,SendMessage
    
     1810-1810/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.example.listviewandroid, PID: 1810
        java.lang.NullPointerException
                at android.widget.AbsListView.obtainView(AbsListView.java:2265)
                at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
                at android.widget.ListView.onMeasure(ListView.java:1175)
                at android.view.View.measure(View.java:16497)
                at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
                at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
                at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
                at android.view.View.measure(View.java:16497)
                at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
                at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1052)
                at android.widget.LinearLayout.onMeasure(LinearLayout.java:590)
                at android.view.View.measure(View.java:16497)
                at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                at android.view.View.measure(View.java:16497)
                at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
                at android.view.View.measure(View.java:16497)
                at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
                at android.view.View.measure(View.java:16497)
                at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
                at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
                at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
                at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
                at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
                at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
                at android.view.Choreographer.doCallbacks(Choreographer.java:574)
                at android.view.Choreographer.doFrame(Choreographer.java:544)
                at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
                at android.os.Handler.handleCallback(Handler.java:733)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5017)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                at dalvik.system.NativeStart.main(Native Method)
    
    package com.example.listviewandroid;
    
    import android.content.Intent;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import android.text.format.Time;
    import java.util.Date;
    
    public class MainActivity extends Activity {
        ListView listView ;
        static final  String STE = "";
        static final String STM = "";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            if (savedInstanceState !=null)
            {
                restoreState(savedInstanceState);
            }
            listView = (ListView) findViewById(R.id.listView);
    
            TextView textviewmenu= (TextView) findViewById(R.id.textViewMenu);
            textviewmenu.setBackgroundColor(Color.rgb(89,89,89));
            textviewmenu.setTextColor(Color.WHITE);
    
            String[] values = getResources().getStringArray(R.array.menuList);
    
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, android.R.id.text1, values);
    
    
            // Assign adapter to ListView
            listView.setAdapter(adapter);
    
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
    
                    // ListView Clicked item index
                    int itemPosition     = position;
    
                    // ListView Clicked item value
                    String  itemValue    = (String) listView.getItemAtPosition(position);
    
    
                    // Show Alert
    
                    switch( position )
                    {
    
                        case 1:  Intent newActivity = new Intent(MainActivity.this,Activity2.class);
                            startActivity(newActivity);
                            break;
    
                        case 2:  Intent newActivity1 = new Intent(MainActivity.this,Activity3.class);
                            startActivity(newActivity1);
                            break;
                        case 3:  Intent newActivity2 = new Intent(MainActivity.this,Activity4.class);
                            startActivity(newActivity2);
                            break;
                        case 4:  Intent newActivity3 = new Intent(MainActivity.this,Activity5.class);
                            startActivity(newActivity3);
                            break;
                        case 5:  Intent newActivity4 = new Intent(MainActivity.this,Activity6.class);
                            startActivity(newActivity4);
                            break;
    
                    }
                    Toast.makeText(getApplicationContext(),
                            "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG)
                            .show();
    
                }
    
            });
            Time now = new Time();
            now.setToNow();
            if (savedInstanceState ==null )
            {
            TextView textview2= (TextView)findViewById(R.id.MAtextView2);
            textview2.setText(now.hour+" : "+now.minute);
            }
    
    
        }
    
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
    
    
            TextView startimetext= (TextView) findViewById(R.id.MAtextView2);
            outState.putString(STE,startimetext.getText().toString());
    
    
    
            TextView endtimetext= (TextView) findViewById(R.id.MAtextView3);
            outState.putString(STM,startimetext.getText().toString());
    
    
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        public void SetEndTime(View view) {
            Time now = new Time();
            now.setToNow();
            TextView textview3= (TextView)findViewById(R.id.MAtextView3);
            textview3.setText(now.hour+" : "+now.minute);
    
        }
    
        public void NextActivity(View view) {
            Intent myIntent = new Intent(MainActivity.this,Activity2.class);
           MainActivity.this.startActivity(myIntent);
            this.overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
    
        }
    
        private void restoreState(Bundle savedInstanceState) {
            TextView startimetext= (TextView) findViewById(R.id.MAtextView2);
    
            TextView endtimetext= (TextView) findViewById(R.id.MAtextView3);
    
    
          startimetext.setText(savedInstanceState.getString(STE));
          endtimetext.setText(savedInstanceState.getString(STM));
    
    
    
        }
    }
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            Intent intent = new Intent(MainActivity.this, SendMessage.class);
            String message = "abc";
            intent.putExtra(EXTRA_MESSAGE, message);
            startActivity(intent);
        }
    });
    
    @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
        if (convertView == null) {
    
                    LayoutInflater inflater = (LayoutInflater) context
                            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater.inflate(R.layout.item_layout, null);
                } 
                    TextView tv=(TextView)convertView .findViewById(R.id.itemName);
    
                     try {
    
                if(position ==1){
    
                    convertView.setBackgroundColor(Color.GREEN);
                }
    
    
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
    
    
    return  convertView;
    
    }
    
    private int selectedIndex;
        private int selectedColor = Color.parseColor("#1b1b1b");
    
    
    In your adapter class; add this method:
    
    public void setSelectedIndex(int position)
        {
            selectedIndex = position;
            notifyDataSetChanged();
        }
    
    if(selectedIndex!= -1 && position == selectedIndex)
            {
                txtTitle.setBackgroundColor(Color.BLACK);
            }
            else
            {
                txtTitle.setBackgroundColor(selectedColor);
            }
    
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> arg0, View view,
                    int position, long id) {
                AnyObject obj=(AnyObject)arg0.getItemAtPosition(position);
    
                                ........
                                .........
                                .........
    
            }
        });