java - 在 Android 的 ListView 中突出显示选定的行

标签 java android xml listview

我创建了一组 listView 行,并成功地更改了颜色。

但是,我希望能够在用户选择行后更改行的颜色。

我已将 XML 设置如下:

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:id="@+id/listView"
    android:listSelector="@android:color/holo_red_light"/>

我的完整java代码如下:

public class Task2Activity extends ListActivity {

ListView list;
String [] dogTitles;
String [] dogDescriptions;
String [] dogToastDescriptions;
int[] images = {R.drawable.husky, R.drawable.pug, R.drawable.yorkshire_terrier, R.drawable.french_bulldog,
R.drawable.border_collie, R.drawable.great_dane, R.drawable.staffordshire_bull_terrier, R.drawable.golden_retriever,
R.drawable.german_shepherd, R.drawable.doberman};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_task2);

    Resources res = getResources();
    dogTitles = res.getStringArray(R.array.titles);
    dogDescriptions = res.getStringArray(R.array.descriptions);
    dogToastDescriptions = res.getStringArray(R.array.toastdescriptions);



    //list = (ListView) findViewById(R.id.listView);
    dogAdapter <String> adapter = new dogAdapter<String>(this, dogTitles, images, dogDescriptions) {
        //list.

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

            View view = super.getView(position, convertView, parent);
            if (position %2 == 1)
            {
                view.setBackgroundColor(Color.parseColor("#e6e9ef"));
            }
            else
            {
                view.setBackgroundColor(Color.parseColor("#c9d0db"));
            }
            return view;

        }
    };

    setListAdapter(adapter);

    registerForContextMenu(getListView());

        }

   @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

   MenuInflater menuInflater = getMenuInflater();
   menuInflater.inflate(R.menu.my_context_menu, menu);

}

protected void onListItemClick(ListView l, View v, int position, long id){

    String item = dogToastDescriptions[position];


       Toast.makeText(this, item, Toast.LENGTH_LONG).show();
    getListView().setSelected(true);


       }

class dogAdapter<S> extends ArrayAdapter<String> {
Context context;
int[] images;
String[] titleArray;
String[] descriptionArray;

dogAdapter(Context c, String[] titles, int imgs[], String[] desc) {
    super(c, R.layout.single_row, R.id.largeText, titles);
    this.context = c;
    this.images = imgs;
    this.titleArray = titles;
    this.descriptionArray = desc;
}

class MyViewHolder {
    ImageView myImage;
    TextView myTitle;
    TextView myDescription;

    MyViewHolder(View v) {
        myImage = (ImageView) v.findViewById(R.id.imageView);
        myTitle = (TextView) v.findViewById(R.id.largeText);
        myDescription = (TextView) v.findViewById(R.id.smallText);
    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    MyViewHolder holder = null;
    if (row == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.single_row, parent, false);
        holder = new MyViewHolder(row);
        row.setTag(holder);
        Log.d("dogs", "Creating a new row");
    } else {
        holder = (MyViewHolder) row.getTag();
        Log.d("dogs", "Recycling stuff");
    }
    //ImageView myImage = (ImageView) row.findViewById(R.id.imageView);
    //TextView myTitle = (TextView) row.findViewById(R.id.largeText);
    //TextView myDescription = (TextView) row.findViewById(R.id.smallText);

    holder.myImage.setImageResource(images[position]);
    holder.myTitle.setText(titleArray[position]);
    holder.myDescription.setText(descriptionArray[position]);

    return row;
}

}
}

非常感谢任何帮助。非常感谢

最佳答案

在onListItemClick()中你可以设置所选项目的颜色:

protected void onListItemClick(ListView l, View v, int position, long id){

    String item = dogToastDescriptions[position];

    v.setBackgroundColor(ContextCompat.getColor(this, android.R.color.holo_green_light));//your color here

    Toast.makeText(this, item, Toast.LENGTH_LONG).show();
    getListView().setSelected(true);

} 

ListView 中还有一个选项,可突出显示所选值:

  <ListView android:id="@+id/my_listView"
     android:choiceMode="singleChoice"
     android:listSelector="@android:color/darker_gray" <!--your color here -->
   />

android:choiceMode = "singleChoice"就是您要找的

关于java - 在 Android 的 ListView 中突出显示选定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42497978/

相关文章:

java - 如何在 Spring Boot 中从/resources/提供 web 文件夹

android - TERMUX-bash : ./a.out:权限被拒绝

android - 警察扫描仪 radio 应用程序如何工作?具体来说,他们从哪里获得流式音频数据?

java - 未命名的模块从两者读取包javax.websocket

xml - 根据 XSD 中的其他值限制 XML 元素值

java - 长轮询网络聊天: more devices of one user

java - 从 unix 值获取前一小时/前一天的时间戳

android - 电话状态改变了监听器从未被解雇

python - 在python中解析旧的excel xml

java - 从 Mac 系统上的控制台导航到 jdk 文件夹