2013-12-05 2 views
3

У меня есть список, который заполняет данные с помощью курсора. В списке есть пользовательский адаптер. Я хочу выделить выделенный элемент в спискеВыделите и сохраните выделенный элемент в Listview

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 текстовых поля, которые используются для представления списка.

Теперь я хочу выделить нажатый элемент в списке. Как я могу это достичь. Я попытался использовать селектор, но никакого эффекта. Я хочу, чтобы элемент был выделен до выбора следующего элемента.

+0

http://stackoverflow.com/questions/9281000/android-keep-listviews-item-highlighted-once-one-has-been-clicked?lq=1[enter описания ссылки здесь] [1] [1]: http://stackoverflow.com/questions/9281000/android-keep-listviews-item-highlighted-once-one-has-been-clicked?lq=1 –

ответ

0

В ListViews по умолчанию не установлен параметрMode, поэтому текущий выбор не указывается по умолчанию.

Чтобы изменить это, вам нужно просто установить атрибут choiceMode вашего ListView в singleChoice. Чтобы отобразить выбранные элементы в вашем списке, вы также должны установить атрибут listSelector.

Пример:

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

Он просто выделяет элемент для время нажимается. Я хочу, чтобы поведение, когда я нажимаю и отпускаю его, должен постоянно выделяться, пока не будет выбран другой элемент. Когда другой элемент нажат, подсветка должна быть сдвинута с первого на второй. –

+0

О, хорошо. Эта ссылка является тем, что вы ищете. http://stackoverflow.com/questions/9281000/android-keep-listviews-item-highlighted-once-one-has-been-clicked .. И не забывайте принимать и повышать, если это сработает для вас. Ура! – user2511882

+0

Спасибо, Но есть ли у кого-нибудь другие варианты? –

2

Если и хотите, чтобы все выбранные элементы выделены в 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 
     }** 
+1

И если вы нажмете другой элемент? У вас будет больше выделенных предметов –

+1

Из десятков ответов на несколько потоков на SO, этот, хотя и неполный, кажется самым простым решением, которое действительно работает! Я добавил код ниже, который добавляет к этому, так что элементы также могут быть отбракованы. Спасибо, что поймал меня в правильном направлении – gnB

0

Продолжая ответ Раши, вот простой метод, который работал для меня - просто следить за последнего выбранного элемента, чтобы вы знали, какой из них следует отключить от предыдущего щелчка, прежде чем включать текущий выбранный элемент.

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

Посмотрите на this answer, который мне тоже помог.

Здесь вы найдете как выделить элемент в спискеView, а также сохранить его выделенным, пока не будет выбран другой элемент.

Смежные вопросы