簡體   English   中英

突出顯示並在Listview中突出顯示所選項目

[英]Highlight and keep highlighted the selected item in Listview

我有一個listview,用於填充游標中的數據。 listview有一個customadapter。 我想在列表視圖中突出顯示所選項目

public class BillOfSaleActivity extends Activity {

    ListView lv1;
    CustomAdapter listAdapter;

    DbHandler dbHandler;
    Cursor c;

    TextView salesman;
    TextView customer;
    TextView TC;

    String userName;
    String custName;

    Float TotalCost = 0f;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bos_main);

        Intent i = getIntent();
        userName = i.getStringExtra("userName");
        custName = i.getStringExtra("custName");

        salesman = (TextView) findViewById(R.id.tv_bosSalesman);
        customer = (TextView) findViewById(R.id.tv_boscust);
        TC = (TextView) findViewById(R.id.textView_bos_total);

        salesman.setText(userName);
        customer.setText(custName);

        dbHandler = new DbHandler(getApplicationContext());
        c = dbHandler.getBosList();

        if (c != null) {
            if (c.moveToFirst())
                do {
                    Float qty = Float.parseFloat(c.getString(4));
                    Float price = Float.parseFloat(c.getString(5)) * qty;
                    TotalCost = TotalCost + price;
                } while (c.moveToNext());
        }

        c.moveToFirst();
        lv1 = (ListView) findViewById(R.id.listView_bos);
        lv1.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        lv1.setSelector(R.drawable.list_selector);

        // String []from = new String []
        // {DbHandler.Bos_List_col5,DbHandler.Bos_List_col6};
        listAdapter = new CustomAdapter(getApplicationContext(), c);
        lv1.setAdapter(listAdapter);

        TC.setText("$" + TotalCost);

        lv1.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View view, int position,
                    long arg3) {
                view.getFocusables(position);               
                view.setSelected(true);                 
            }
        });
    }

    public class CustomAdapter extends BaseAdapter {
        Cursor cursor;
        Context context;

        public CustomAdapter(Context cont, Cursor c) {

            this.cursor = c;
            this.context = cont;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return c.getCount();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

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

        @Override
        public View getView(int position, View view, ViewGroup arg2) {

            Log.i("dhiraj", "In getView");

            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.activity_bos_list, null);

            cursor.moveToPosition(position);

            TextView textView1 = (TextView) view
                    .findViewById(R.id.textView1_bos);
            TextView textView2 = (TextView) view
                    .findViewById(R.id.textView2_bos);
            TextView textView3 = (TextView) view
                    .findViewById(R.id.textView3_bos);
            TextView textView4 = (TextView) view
                    .findViewById(R.id.textView4_bos);

            textView1.setText(cursor.getString(3));
            textView2.setText(cursor.getString(2));
            textView3.setText(cursor.getString(4) + " x  $"
                    + cursor.getString(5));

            Float qty = Float.parseFloat(cursor.getString(4));
            Float price = Float.parseFloat(cursor.getString(5)) * qty;

            textView4.setText("$ " + price);

            return view;
        }

    }
}

我使用的布局是......這是主要的布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/linz"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:weightSum="2" >

        <TextView
            android:id="@+id/tv_bosSalesman"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:paddingLeft="20dp"
            android:text="Salesman"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@color/red" />

        <TextView
            android:id="@+id/tv_boscust"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Customer"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@color/lightBlue" />
    </LinearLayout>

    <TextView
        android:id="@+id/tv_bos_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/linz"
        android:background="@android:color/darker_gray"
        android:gravity="center"
        android:text="Nota de Venta"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout
        android:id="@+id/lin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tv_bos_header"
        android:weightSum="4" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Cant"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Cod"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Nombre"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Total"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    </LinearLayout>

    <ListView
        android:id="@+id/listView_bos"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/linz12"
        android:layout_below="@+id/lin"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:dividerHeight="1dp"
        android:drawSelectorOnTop="true" />

    <LinearLayout
        android:id="@+id/linz234"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:weightSum="3" >

        <Button
            android:id="@+id/button_bos_eliminar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Eliminar"
            android:textColorHint="@color/red" />

        <Button
            android:id="@+id/button_bos_agregar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Agregar"
            android:textColorHint="@color/green" />

        <Button
            android:id="@+id/button_bos_finalizar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Finalizar"
            android:textColorHint="@color/blue" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linz12"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/linz234"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView_bos_total"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

</RelativeLayout>

另一個布局包含4個用於Listview的文本框。

現在我想突出顯示Listview中的按下項目。 我怎樣才能做到這一點。 我嘗試使用選擇器但沒有效果。 我想要突出顯示該項目,直到選擇下一個項目。

如果您想要在列表視圖中突出顯示所有選定的項目,

   **@Override
     public void onItemClick(AdapterView<?> adapterView, View view,
                    int position, long arg3) {
              view.setBackgroundColor(getResources().getColor(
                        R.color.pressed_color)); 
            //change the background color or image of the selected item
         }**

ListViews默認情況下沒有設置choiceMode,因此默認情況下不指示當前選擇。

要更改此設置,只需將ListView的choiceMode屬性設置為singleChoice即可。 要顯示列表中的選定項,還應設置listSelector屬性。

例:

<ListView android:id="@+id/my_list"
        android:choiceMode="singleChoice" 
        android:listSelector="@android:color/darker_gray" />

繼續Rashi的回答,這是一個對我有用的簡單方法 - 只需跟蹤最后選擇的項目,以便在打開當前所選項目之前知道從上一次點擊中關閉哪一項。

public class SomeActivity extends Activity {

    View previouslySelectedItem = null;

    ...
    protected void onCreate(Bundle savedInstanceState) {

        ListView myListView = (ListView)findViewById(R.id.some_list);

        myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

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

                if (previouslySelectedItem != null)
                {
                    previouslySelectedItem.setBackgroundColor(
                            getResources().getColor(R.color.transparent));
                }

                view.setBackgroundColor(
                        getResources().getColor(R.color.orange));

                previouslySelectedItem = view;
            }
        });

看看這個對我有幫助的答案

在那里,您將找到如何突出顯示listView中的項目,並在選擇另一個項目之前將其保持突出顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM