このリスト ビューの項目に問題があります。通常の動作では、ユーザーが 1 つのアイテムをタップすると、背景色がオレンジ色に変わります。これは私のアプリでは発生していません。理由がわかりません。
main.xml には次のものがあります。
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
フラグメントの xml には次のものしかありません。
<ListView
android:id="@android:id/list"
style="@style/MyListView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
listView アイテム内で膨らませるビューは次のとおりです。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textViewName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/imageView1"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView1"
android:layout_alignLeft="@+id/textViewName"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="10dp"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:src="@drawable/bottom_arrow" />
</RelativeLayout>
ListView に定義したスタイルは次のとおりです。
<style name="MyListView" parent="@android:style/Widget.ListView.White">
<item name="android:listSelector">@drawable/list_subject_selector</item>
<item name="android:cacheColorHint">@android:color/transparent</item>
<item name="android:background">@drawable/list_subject_selector</item>
</style>
list_subject_selector ドローアブルは次のとおりです。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- touch down -->
<item android:drawable="@drawable/list_subject_focused" android:state_pressed="true"/>
<!-- selected -->
<item android:drawable="@drawable/list_subject_unfocused" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>
</selector>
なぜこれが起こっているのかわかりません... Android ICSでテストしています。
何か案は?
みんなありがとう、フェリペ
更新 1 これは ListFragment コードです。
public class MyFragment extends ListFragment {
private ListAdaptor adapter;
private InternalDB db;
Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
db = new InternalDB(getActivity());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayList<EventVO> listVO = db.getSummaryEvents(true);
adapter = new ListAdaptor(mContext, R.layout.event_inflate, listVO);
setListAdapter(adapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LinearLayout rl = (LinearLayout) inflater.inflate(R.layout.general_list, container, false);
return rl;
}
private class ListAdaptor extends ArrayAdapter<EventVO> {
private ArrayList<EventVO> listVO;
public ListAdaptor(Context context, int textViewResourceId, ArrayList<EventVO> items) {
super(context, textViewResourceId, items);
this.listVO = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
v = ViewGroup.inflate(getContext(), R.layout.event_inflate, null);
}
final EventVO o = listVO.get(position);
TextView fullName = (TextView) v.findViewById(R.id.textViewName);
fullName.setText(o.getUserName());
//removed part of the code for brevity
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent(mContext, EventDetailsActivity.class);
i.putExtra("USER_ID", o.getUserId());
startActivity(i);
}
});
return v;
}
}
}
更新 2 動作するようになりました! それはとても迷惑でした。これを機能させるために私がしたこと:
膨らませるために使用していたxmlファイルには次のものがありました。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true" >
私は次のように変更しました:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
しかし、実際に変更を加えたのはこれだと思います: onActivityCreated() の内部
list = getListView();
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
ListAdaptor la = (ListAdaptor)arg0.getAdapter();
EventVO vo = la.getItem(arg2);
Intent i = new Intent(mContext, EventDetailsActivity.class);
i.putExtra("USER_ID", vo.getUserId());
i.putExtra("IS_BORROWED", true);
startActivity(i);
}
重要なのはlist = getListView();という行です。 このコードで ListView を取得していませんでした。onCreateView() メソッドで、findViewById を使用して listView を取得していました。私は実際の ListView オブジェクトとのリンクを失っていたと思います。
私を助けてくれたみんなに感謝します!:)
フェリペ});