Android sherlockfragment内的gridview无法执行McClick
我看过很多关于这方面的帖子,但我不明白我的代码不起作用 我在SherlockFragment中有一个gridview,我在异步任务中更新gridview项 这是我的gridView xmlAndroid sherlockfragment内的gridview无法执行McClick,android,actionbarsherlock,android-gridview,Android,Actionbarsherlock,Android Gridview,我看过很多关于这方面的帖子,但我不明白我的代码不起作用 我在SherlockFragment中有一个gridview,我在异步任务中更新gridview项 这是我的gridView xml <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:horizontalSpacing="4dip"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dip"
android:padding="4dip"
android:background="#000000"
/>
而GridView项是xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="140dp"
android:layout_height="150dp"
android:paddingLeft="4dp"
android:paddingTop="4dp" >
<ImageView
android:id="@+id/cat_thumbnail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/content_description"
android:scaleType="fitXY"
android:src="@drawable/logo" />
<TextView
android:id="@+id/cat_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/cat_thumbnail"
android:background="#80a0a0a0"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#ffffff" />
我使用的代码是
extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.grid_layout, container, false);
gridView = (GridView) (v.findViewById(R.id.gridview));
return v;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imageLoader = ImageLoader.getInstance();
setHasOptionsMenu(false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
CategoryItems = new ArrayList<HashMap<String, String>>();
new GridImages().execute();
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<String, String> tempMap = new HashMap<String, String>();
tempMap = CategoryItems.get(position);
String Catid = tempMap.get(TAG_ID);
Fragment videoFragment = new VideosFragment();
Bundle bundle = new Bundle();
bundle.putString(TAG_ID, Catid);
videoFragment.setArguments(bundle);
FragmentChangeActivity fca = (FragmentChangeActivity) getActivity();
fca.switchContent(videoFragment);
}
});
}
public class ImageAdapter extends BaseAdapter {
public class ViewHolder {
public TextView title;
public ImageView thumbnail;
}
private Context mContext;
public ImageAdapter(Context ctx) {
mContext = ctx;
}
@Override
public int getCount() {
return imageUrls.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
final ViewHolder holder;
if (convertView == null) {
view = LayoutInflater.from(mContext).inflate(
R.layout.category_list_row, parent, false);
holder = new ViewHolder();
holder.title = (TextView) view.findViewById(R.id.cat_title);
holder.title.setSelected(false);
holder.thumbnail = (ImageView) view
.findViewById(R.id.cat_thumbnail);
holder.thumbnail.setSelected(false);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
view=(View) convertView;
view.setTag(holder);
}
HashMap<String, String> tempMap = new HashMap<String, String>();
tempMap = CategoryItems.get(position);
holder.title.setText(tempMap.get(TAG_NAME));
imageLoader.displayImage(imageUrls[position], holder.thumbnail,
defaultOptions);
holder.title.setOnClickListener(forItemClick);
holder.thumbnail.setOnClickListener(forItemClick);
return view;
}
}
private OnClickListener forItemClick=new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "kjsdhkfds", Toast.LENGTH_LONG).show();
}
};
class GridImages extends AsyncTask<Void, Void, Void> {
ProgressDialog dialog = new ProgressDialog(
CategoryFragment.this.getActivity());
@Override
protected Void doInBackground(Void... params) {
parsing();
return null;
}
protected void onPreExecute() {
dialog.setMessage("Please wait...");
dialog.setIndeterminate(true);
dialog.show();
}
protected void onPostExecute(Void unused) {
gridView.setAdapter(new ImageAdapter(getActivity()));
dialog.dismiss();
}
}
private void parsing() {
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(url.trim());
try {
JSONObject Collection = json.getJSONObject(TAG_HEADER);
Category = Collection.getJSONArray(TAG_CATEGORY);
for (int i = 0; i < Category.length(); i++) {
JSONObject temp = Category.getJSONObject(i);
String id = temp.getString(TAG_ID);
String name = temp.getString(TAG_NAME);
String thumbnail = temp.getString(TAG_THUMBNAIL);
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_ID, id);
map.put(TAG_NAME, name);
map.put(TAG_THUMBNAIL, thumbnail);
CategoryItems.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
int i = 0;
imageUrls = new String[CategoryItems.size()];
for (HashMap<String, String> map : CategoryItems) {
imageUrls[i] = map.get(TAG_THUMBNAIL).trim();
System.out.println(imageUrls[i]);
i++;
}
defaultOptions = new DisplayImageOptions.Builder().cacheInMemory()
.showStubImage(R.drawable.logo).resetViewBeforeLoading()
.cacheOnDisc().build();
config = new ImageLoaderConfiguration.Builder(getActivity()
.getApplicationContext()).defaultDisplayImageOptions(
defaultOptions).build();
imageLoader.init(config);
}
扩展SherlockFragment{
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
最终视图v=充气机。充气(R.layout.grid_布局,容器,假);
gridView=(gridView)(v.findviewbyd(R.id.gridView));
返回v;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
imageLoader=imageLoader.getInstance();
设置选项菜单(错误);
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setRetainInstance(真);
CategoryItems=新的ArrayList();
新建GridImages().execute();
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
HashMap tempMap=新的HashMap();
tempMap=CategoryItems.get(位置);
字符串Catid=tempMap.get(TAG_ID);
片段videoFragment=新的VideosFragment();
Bundle=新Bundle();
bundle.putString(TAG_ID,Catid);
videoFragment.setArguments(bundle);
FragmentChangeActivity fca=(FragmentChangeActivity)getActivity();
fca.切换内容(视频片段);
}
});
}
公共类ImageAdapter扩展了BaseAdapter{
公共类视图持有者{
公共文本视图标题;
公共图像视图缩略图;
}
私有上下文;
公共图像适配器(上下文ctx){
mContext=ctx;
}
@凌驾
public int getCount(){
返回imageurl.length;
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
最终持票人;
if(convertView==null){
视图=布局更平坦。从(mContext)。充气(
R.layout.category_list_row,parent,false);
holder=新的ViewHolder();
holder.title=(TextView)view.findViewById(R.id.cat_title);
所选持有人名称(假);
holder.thumbnail=(ImageView)视图
.findViewById(R.id.cat_缩略图);
支架.缩略图.已选择(假);
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
视图=(视图)转换视图;
视图.设置标签(支架);
}
HashMap tempMap=新的HashMap();
tempMap=CategoryItems.get(位置);
holder.title.setText(tempMap.get(TAG_NAME));
imageLoader.displayImage(imageUrls[position],holder.缩略图,
违约期权);
holder.title.setOnClickListener(forItemClick);
holder.thumboil.setOnClickListener(forItemClick);
返回视图;
}
}
private OnClickListener forItemClick=新建OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(getActivity(),“kjsdhkfds”,Toast.LENGTH_LONG.show();
}
};
类GridImages扩展异步任务{
ProgressDialog=新建ProgressDialog(
CategoryFragment.this.getActivity());
@凌驾
受保护的Void doInBackground(Void…参数){
解析();
返回null;
}
受保护的void onPreExecute(){
setMessage(“请稍候…”);
对话框。setUndeterminate(true);
dialog.show();
}
受保护的void onPostExecute(未使用的void){
setAdapter(新的ImageAdapter(getActivity());
dialog.dismise();
}
}
私有void解析(){
JSONParser jParser=新的JSONParser();
JSONObject json=jParser.getJSONFromUrl(url.trim());
试一试{
JSONObject Collection=json.getJSONObject(标记头);
Category=Collection.getJSONArray(TAG_Category);
对于(int i=0;i
请告诉我我做错了什么,我找不到
我无法为我的gridView执行onClick事件
我我已经更新了我的代码,但我认为这不是最终的解决方案,因为我没有使gridview可点击。有价值的评论总是Thaks@Dhaval Sodha Parmar.,在设置
class GridImages extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
//your background task code
return null;
}
protected void onPostExecute(Void params) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
//add the below line
gridView = (GridView)getView().findViewById(R.id.gridView);
gridView.setAdapter(new ImageAdapter(getActivity()));
/*gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});*/
gridView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0,View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
}