1

何が起こっているのか、背景色の変更を選択したリストビューがあります。デフォルトでは、最初のリストビュー項目を次のように選択しています

public class OneWayFlightResult extends BaseAdapter {

private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;


public OneWayFlightResult(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.row, null);
    TextView flightTime = (TextView)vi.findViewById(R.id.flightTime); // title
    TextView flightCompanyName = (TextView)vi.findViewById(R.id.flightCompanyName); // title
    TextView flightNumber = (TextView)vi.findViewById(R.id.flightNumber); // title
    ImageView flightLogo = (ImageView)vi.findViewById(R.id.flightLogo);

    HashMap<String, String> flight = new HashMap<String, String>();
    flight = data.get(position);

    flightTime.setText(flight.get(TestActivity.FlightTime));
    flightCompanyName.setText(TestActivity.FlightCompanyName);
    flightNumber.setText(TestActivity.FlightNumber);

    if(position == 0){

        vi.setBackgroundResource(R.drawable.selection_effect);
        vi.setSelected(true);

    }
    return vi;
}

これは、このselection_effect.xmlで使用している XML ファイルです。

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_focused="true">
    <shape>
        <solid android:color="#ffffff" />
    </shape>
</item>
    <item>
    <shape>
        <solid android:color="#00a7eb" />
    </shape>
</item>
</selector>

したがって、デフォルトでは、これは最初のリストビューが選択されています。ユーザーが別のリストビューアイテムを選択すると、最初のリストビューアイテムが選択されたままになり、他のリストビューアイテムも同じ効果を得ます.リストビューアイテムのクリック時の効果を動的に変更するにはどうすればよいですか?デフォルトでは、ユーザーが他のアイテムを選択すると、最初のアイテムが選択されて表示されます 他のアイテムが選択されます デフォルトのアイテムからの効果が削除されます

4

4 に答える 4

0

私はListViewで同様の問題を抱えていました。アイテムがクリックされたときにアダプターのメソッドを呼び出し、adadpter.SetPosition(position) {mSelectedPsoiton = position; notifyDataSetChanged();}getView関数で位置がselectedPositionと等しいかどうかを確認し、それに応じて背景を設定しますこれは決して失敗しません、フォーカスはurとして機能しません常にタッチモード

    //adapter class
  public override View GetView(int position, View convertView, ViewGroup parent) { TextView view = null; int lookupPos = position; if (null == convertView) { view = new TextView(_context); view.SetTextSize(ComplexUnitType.Sp, 20); view.SetPadding(_pixels, _pixels, _pixels, _pixels); } else { view = convertView as TextView; }
        if (position == mSelectedPos )
        {
            view.SetBackgroundResource(Android.Resource.Color.HoloBlueDark);
        }
        else
        {
            view.SetBackgroundResource(Resource.Drawable.listItemSelector);
        }
        return view;
    }
public void SetSelectedPosition(int position) { mSelectedPos = position;
    }
private int mSelectedPos = -1;

// ListView code, _adapter is adapter of listview

listView.SetOnItemClickListener (new OnItemClickListener() { @Override public void onItemClick(AdapterView adapter, View view, int pos, long id) { _adapter.SetSelectionPostion(pos); }

}
于 2013-08-12T05:50:58.570 に答える
0

次のように試すことができます:

ListViewのアダプタを設定した後、デフォルトの選択のために位置を0に設定します。つまりlistView.setSelection(0);onItemClickアイテムの選択された位置(3番目のパラメータ)を取得するため、onItemClick内に書き込みますlistView.setSelection("that 3rd param");

于 2013-08-08T07:36:25.950 に答える