ListView Styles

  • 1 Antworten
  • Letztes Antwortdatum
F

FinelyDoyle

Neues Mitglied
0
Hallo zusammen,

ich hab ein Problem bei den ListViews.

ich würde gerne eine ListView machen bei der ich mehrere items auswählen kann (listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)).
Die jeweils ausgewählten Elemente sollen dann, typisch der Holo-Theme, hellblau hinterlegt sein. Jedoch will bei mir das Hinterlegen nicht so richtig Funktionieren. Wenn ein Element checked ist wird nur die Schrift etwas dünkler.

layout/activity_main.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <ListView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/listView"
        android:background="@drawable/list_view">
    </ListView>

</LinearLayout>

layout/main_row.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:paddingTop="10dp"
	    android:paddingBottom="10dp"
	    android:orientation="vertical"
	    >

    <TextView
        android:id="@+id/row"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dp"
        android:textSize="16sp"
        />

</LinearLayout>

drawable/list_view.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
	<item
		android:state_checked="false"
		android:drawable="@color/white" />
	
	<item
		android:state_checked="true"
		android:state_selected="true"
		android:state_focused="true"
		android:state_pressed="true"
		android:drawable="@color/blue" />
	
</selector>

values/strings.xml
Code:
<resources>
    <color name="blue">#33B5E5</color>
    <color name="white">#FFFFFF</color>
</resources>

MainActivity.java
Code:
public class MainActivity extends Activity {

	private ListView listView;
	private MyCustomAdapter listAdapter;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_main);
		listView = (ListView) findViewById(R.id.listView);
		listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		
		listAdapter = new MyCustomAdapter();
		listView.setAdapter(listAdapter);
		
		listAdapter.addRow("Item 1");
		listAdapter.addRow("Item 2");
		listAdapter.addRow("Item 3");
		
		listView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				
				if(listView.isItemChecked(arg2)){
					listView.setItemChecked(arg2, true);
				}else{
					listView.setItemChecked(arg2, false);
				}
				
				 SparseBooleanArray checked = listView.getCheckedItemPositions();
		    	  
		    	  int len = listView.getCount();

		    	  String str = "";

		          for(int i=0;i<len;i++)
		         {

		              if(checked.get(i)==true)
		              {

		                  String item =  listView.getAdapter().getItem(checked.keyAt(i)).toString();
		                  str = str + item;

		              }


		          }
		          
		        Toast.makeText(MainActivity.this,
		            str, Toast.LENGTH_LONG).show();
		        
			}
		});	
	}
	

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
    
    private class MyCustomAdapter extends BaseAdapter {
      	 
        private ArrayList<String> resultData = new ArrayList<String>();

        private LayoutInflater mInflater;
 
        public MyCustomAdapter() {
            mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
 
        public void addRow(String item) {
        	resultData.add(item);
            notifyDataSetChanged();
        }
        
        public String getResultItem(int position) {
            return resultData.get(position);
        }
        

        public long getItemId(int position) {
            return position;
        }
 
        public View getView(int position, View convertView, ViewGroup parent) {
        	ViewHolder holder; 
        	
        	if (convertView == null) { 
        	
        		 convertView = mInflater.inflate(R.layout.main_row, 
        				 parent, false);
        		 holder = new ViewHolder(); 
        		 holder.textView = (TextView) convertView.findViewById(R.id.row); 
        		 
        		 convertView.setTag(holder); 
        	 } else { 
        		 holder = (ViewHolder) convertView.getTag(); 
        	 } 
  
        	 holder.textView.setText(getResultItem(position)); 

        	 return convertView;
        }

		public int getCount() {
			return resultData.size();
		}

		public Object getItem(int position) {
			return getResultItem(position);
		}
    }
    
    private static class ViewHolder {
    	TextView textView;
    	
    	public ViewHolder() {
			
		}
	}
}

könnt ihr mir da vielleicht helfen.

LG Finley
 
Probier folgendes:

Code:
<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:orientation="vertical"
[B]        [COLOR=Red]android:background="?android:attr/activatedBackgroundIndicator"[/COLOR][/B]
        >

    <TextView
        android:id="@+id/row"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dp"
        android:textSize="16sp"
        />

</LinearLayout>
Funktioniert aber nur ab API 11.
 
Zurück
Oben Unten