我在片段中使用了listview但是我使用了列表onItemClick
监听器无法正常工作。我的代码如下以及如何完善解决方案请帮助我!!
感谢!!!
public class StoreProfileFragment extends Fragment{
ListView lv;
ArrayList<MyStore_list_dto> list = new ArrayList<MyStore_list_dto>();
MyApplication app;
MyListAdapter adtstore;
View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_store_profile, container, false);
app = (MyApplication) getActivity().getApplicationContext();
list = DBAdpter.getMyStoreData(app.getUserID());
lv = (ListView) rootView.findViewById(R.id.myStore_listview);
adtstore = new MyListAdapter(getActivity().getApplicationContext());
lv.setAdapter(adtstore);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position,
long id) {
Log.v("log_tag", "List Item Click");
}
});
return rootView;
}
public class MyListAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public MyListAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
convertView = mInflater.inflate(R.layout.custome_mystorelist,
null);
ImageButton store_Name_img = (ImageButton) convertView
.findViewById(R.id.my_Store_logo_image);
TextView store_Name_txt = (TextView) convertView
.findViewById(R.id.mystore_list_name);
store_Name_txt.setText( list.get(position).name);
if (list.get(position).image != null) {
byte[] Image_getByte;
try {
Image_getByte = Base64.decode(list.get(position).image);
ByteArrayInputStream bytes = new ByteArrayInputStream(
Image_getByte);
BitmapDrawable bmd = new BitmapDrawable(bytes);
Bitmap bm = bmd.getBitmap();
store_Name_img.setImageBitmap(bm);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
store_Name_img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm
.beginTransaction();
MyStoreItemFragment fm2 = new MyStoreItemFragment();
fragmentTransaction.replace(R.id.rela_myStore_fragment,
fm2, "HELLO");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Bundle bundle = new Bundle();
bundle.putString("position", list.get(position).store_id);
fm2.setArguments(bundle);
}
});
return convertView;
}
}
}
下面的xml文件中的ListView:
<ListView
android:id="@+id/myStore_listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginTop="5dp"
android:dividerHeight="0dip"
>
</ListView>
下面的Custome listItem xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rela_store_fragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="5dip"
android:background="@android:color/white" >
<ImageButton
android:id="@+id/my_Store_logo_image"
android:layout_width="60dip"
android:layout_height="60dip"
android:layout_margin="5dip" />
<TextView
android:id="@+id/mystore_list_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/my_Store_logo_image"
android:layout_marginBottom="18dp"
android:layout_marginLeft="18dp"
android:layout_toRightOf="@+id/my_Store_logo_image"
android:layout_margin="5dip"
android:text="dfdsfds"
android:textColor="#040404"
android:textSize="15sp"
android:textStyle="bold"
android:typeface="sans" />
</RelativeLayout>
答案 0 :(得分:16)
添加此
android:descendantFocusability="blocksDescendants"
到listItem.xml
中的RelativeLayout。
我猜ImageButton
在您点击列表行时会获得焦点。
编辑:
考虑使用ViewHolder
模式
参考:
http://developer.android.com/training/improving-layouts/smooth-scrolling.html
答案 1 :(得分:2)
在自定义xml文件中添加这些属性
android:focusableInTouchMode="false"
android:focusable="false"
用于TextView和ImageButton。
答案 2 :(得分:0)
每当你列出项目包含类似按钮的东西时,就会出现这种类型的问题。 您应该在适配器类中使用视图持有者。
private class ViewHolder{
ImageButton imagebutton;
TextView textView;
}
在你的getview方法中使用它。希望这对你有用。
答案 3 :(得分:0)
在这里:使用onActivityCreated()代替并在此处使用代码:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
ListView lv1 = (ListView)getActivity().findViewById(R.id.myStore_listview);
adtstore = new MyListAdapter(getActivity().getApplicationContext());
lv.setAdapter(adtstore);
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
Toast.makeText(getActivity(), "Item clicked : " + position, Toast.LENGTH_SHORT).show();
}
});
}
现在应该工作.. :))