私のアプリにはListViewがあり、ListViewにはセレクターがあります。このListViewの最初のアイテムを選択させたいデフォルトとしてまさにアプリの起動、どうやって?誰かがいくつかのヒントを与えることができますか? THXたくさん。
あなたはこれを行うことができます
yourListView.setSelection(0);
yourListView.getSelectedView().setSelected(true);
これがお役に立てば幸いです
yourlist.setItemChecked(position,true)
これは私にとってはうまくいきます。これがお役に立てば幸いです。 :)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// do someting...
if(position == 0){
mListView.performItemClick(convertView, 0, 0);
}
}
今、私はこれを実装する別の良い方法を見つけました。
次に、次のように進めます。
int defaultPositon = 0;
int justIgnoreId = 0;
mListView.setItemChecked(defaultPositon, true);
mListView.performItemClick(mListView.getSelectedView(), defaultPositon, justIgnoreId);
ListViewに配列のインデックスを0に指定したので、これは機能すると思います
ListView.setSelection(0);
//put the below code in get view function
if(position==0)
{
convertView.setSelected(true);
}
以下の解決策は私のために働きます:
ビューの取得時に背景/ビューIDを設定し、リストビューのsetOnItemClickListenerを使用する
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitems, null);
}
ListItem m = items.get(position);
if (m != null) {
TextView txt = (TextView)v.findViewById(R.id.textView);
txt.setText(m.Item);
}
// set selected item
LinearLayout ActiveItem = (LinearLayout) v;
v.setId(position);
if (position == GetDeviceDetails.selectedsize)
{
ActiveItem.setBackgroundColor(0xFF7F8184);
}
return v;
}
作成時のアクティビティ:
listView1.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
adapter.findViewById(GetDeviceDetails.selectedsize).setBackgroundColor(0xFFFFFFF);
GetDeviceDetails.selectedsize = position;
adapter.findViewById(position).setBackgroundColor(0xFF7F8184);
Log.d("Selected Id", "" + v.getId());
Log.d("find Selected Id", "" + adapter.findViewById(0));
}
});
listView1.setSelection(0);
listView1.setItemChecked(0, true);
onItemClickListener
を作成してから、このスニペットを使用して、適切な値を入力します。
listView.performItemClick(View view, int position, long id);
ドキュメントを参照 詳細については。
listview.setSelection(0);
を呼び出すことができます。 List
にデータを入力した後、これを呼び出していることを確認してください。 List
にデータを入力する前に呼び出すと、その時点ではデータがないため、機能しません。
このように修正できます。
//set list adapter, then
lv.setItemChecked(1, true);//position 1
lv.setSelection(1);//position 1
単一の選択肢でXMLレイアウトを更新します。
<ListView
Android:id="@+id/lv"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/list_item_background"
Android:cacheColorHint="#FFFFFF"
Android:choiceMode="singleChoice"
Android:dividerHeight="1dip" >
</ListView>
リストビューの背景XMLをlist_item_background.xmlとして設定します。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/bg_list_default" Android:state_activated="false"/>
<item Android:drawable="@drawable/bg_list_pressed" Android:state_pressed="true"/>
<item Android:drawable="@drawable/bg_list_pressed" Android:state_activated="true"/>
これは、クリックして追加のイベント処理を実行する場合に機能します。
listView.getAdapter().getView(position, null, null).performClick();
これは私のために働きます。カスタムアダプタを作成する必要があります。
First Create Modal Class
public class FilterBean {
String filter_catagory;
boolean isSelected;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
public String getFilter_catagory() {
return filter_catagory;
}
public void setFilter_catagory(String filter_catagory) {
this.filter_catagory = filter_catagory;
}
}
In Adapter Class
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = layoutInflater.inflate(R.layout.size_name_indicator, null);
txt = (TextView) convertView.findViewById(R.id.key_textView);
txt.setText(getItem(position).getFilter_catagory());
if(getItem(position).isSelected()){
txt.setBackgroundColor(context.getResources().getColor(R.color.transparent));
}else {
txt.setBackgroundColor(context.getResources().getColor(R.color.colorWhite));
}
return convertView;
}
public void updateNameBean(String key,boolean checked)
{
for(int i=0;i<getCount();i++)
{
FilterBean filterBean = getItem(i);
if(filterBean.getFilter_catagory().equals(key))
{
filterBean.setSelected(checked);
}else {
filterBean.setSelected(false);
}
}
notifyDataSetChanged();
}
In Filter Activity or Fragment
filter_listView.setAdapter(filterNameAdapter);
filterNameAdapter.updateNameBean(filterNameAdapter.getItem(0).getFilter_catagory(),true);
filter_listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
String key = filterNameAdapter.getItem(position).getFilter_catagory();
filterNameAdapter.updateNameBean(filterNameAdapter.getItem(position).getFilter_catagory(),true);
}
});
私はこれを解決するためにデータバインディングを使用しました、
次のコードビハインドを使用します。
private List<Unit> _units;
private Unit _selectedUnit;
public Unit selectedUnit{
get{
if (_selectedUnit is null){
return _units.Count > 0 ? _units[0] : null;
}else{
return _selectedUnit;
}
}
set{
if (_selectedUnit != value){
_selectedUnit = value;
OnPropertyChanged("selectedUnit");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName){
var changed = PropertyChanged;
if (changed != null){
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
およびXAML
<ListView ItemsSource="{Binding units}"
SelectedItem="{Binding selectedUnit, Mode=TwoWay}">