Java 如何使用默认值设置GridView中的第一项,并基于JSON结果填充其余项

Java 如何使用默认值设置GridView中的第一项,并基于JSON结果填充其余项,java,android,gridview,Java,Android,Gridview,嗨,我想用默认值设置GridView的第一项,并相应地填充该项的其余部分(基于JSON结果) 我的代码由两个类组成 1.主要活动 2.GridView适配器 下面是我的GridAdapter的代码 public class ContactGridAdapter extends ArrayAdapter<Person> { *** SOME INITIALIZATION *** public ContactGridAdapter(Context context, ArrayList&

嗨,我想用默认值设置GridView的第一项,并相应地填充该项的其余部分(基于JSON结果)

我的代码由两个类组成 1.主要活动 2.GridView适配器

下面是我的GridAdapter的代码

public class ContactGridAdapter extends ArrayAdapter<Person> {
*** SOME INITIALIZATION ***

public ContactGridAdapter(Context context, ArrayList<Person> values){
    super(context, R.layout.grid_item_text);
    mContext = context;
    mList = values;
}

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

@Override
public Person getItem(int position) {
    // TODO Auto-generated method stub
    return mList.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View view;

    if(convertView == null){
        view = new View(mContext);
        view = inflater.inflate(R.layout.grid_item_text, null);

        TextView personName = (TextView) view.findViewById(R.id.textItem);
        ImageView personThumb = (ImageView) view.findViewById(R.id.iconItem);

        // IF HAVE RESULT
        if(mList.size() != 0){
            /* INITIALIZES PHOTO */
            BitmapFactory.Options bmOptions;
            bmOptions = new BitmapFactory.Options();
            bmOptions.inSampleSize = 1;

            /*
            Bitmap bmpThumb = loadBitmap(mList.get(position).accId, bmOptions, IMAGE_THUMB);

            if(bmpThumb != null){
                ImageHelper ih = new ImageHelper();
                bmpThumb = ih.getRoundedCornerBitmap(bmpThumb, 10);
                personThumb.setImageBitmap(bmpThumb);
            }else{
                personThumb.setImageResource(mThumbs);
            }
            */

            personThumb.setImageResource(mThumbs);
            personName.setText(mList.get(position).fullName.toString());
        }else{
            personThumb.setImageResource(mThumbs);
            personName.setText("Add Friends");
        }



    }else{
        view = (View) convertView;
    }
    return view;
}
公共类ContactGridAdapter扩展了ArrayAdapter{
***一些初始化***
公共ContactGridAdapter(上下文、ArrayList值){
超级(上下文、右布局、网格项和文本);
mContext=上下文;
mList=数值;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回mList.size();
}
@凌驾
公众人物getItem(内部职位){
//TODO自动生成的方法存根
返回mList.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
LayoutFlater充气器=(LayoutFlater)mContext
.getSystemService(上下文布局\充气机\服务);
视图;
if(convertView==null){
视图=新视图(mContext);
视图=充气机。充气(R.layout.grid\u item\u text,空);
TextView personName=(TextView)view.findViewById(R.id.textItem);
ImageView personTumb=(ImageView)view.findViewById(R.id.iconItem);
//如果有结果
如果(mList.size()!=0){
/*初始化照片*/
选项bmOptions;
bmOptions=新的BitmapFactory.Options();
bmOptions.inSampleSize=1;
/*
位图bmpThumb=加载位图(mList.get(position).accId、bmOptions、IMAGE_THUMB);
if(bmpThumb!=null){
ImageHelper ih=新的ImageHelper();
bmpThumb=ih.getRoundedCornerBitmap(bmpThumb,10);
personThumb.setImageBitmap(bmpThumb);
}否则{
personThumb.setImageResource(mThumbs);
}
*/
personThumb.setImageResource(mThumbs);
personName.setText(mList.get(position.fullName.toString());
}否则{
personThumb.setImageResource(mThumbs);
setText(“添加朋友”);
}
}否则{
视图=(视图)转换视图;
}
返回视图;
}
摘自我的主要活动

protected void onCreate(Bundle savedInstanceState) {
private GridView gridView;
gridView = (GridView) findViewById(R.id.thumb_grid_view);
getFriends();
}

private void getFriends(){
    RetrieveFriendList task = new RetrieveFriendList();
    task.execute();
}

private class RetrieveFriendList extends AsyncTask<String, Void, ArrayList<Person>> {

        @Override
        protected ArrayList<Person> doInBackground(String... params) {
blah...

            return mFriendList;
        }

        @Override
        protected void onPostExecute(final ArrayList<Person> result) {          
            if(result != null){
                gridView.setAdapter(new ContactGridAdapter(getApplicationContext(), result));
            }
        }
    }
创建时受保护的void(Bundle savedInstanceState){
私有GridView GridView;
gridView=(gridView)findViewById(R.id.thumb\u grid\u view);
交朋友();
}
私密的void getFriends(){
RetrieveFriendList任务=新建RetrieveFriendList();
task.execute();
}
私有类RetrieveFriendList扩展异步任务{
@凌驾
受保护的ArrayList doInBackground(字符串…参数){
废话。。。
返回好友列表;
}
@凌驾
受保护的void onPostExecute(最终ArrayList结果){
如果(结果!=null){
setAdapter(新的ContactGridAdapter(getApplicationContext(),result));
}
}
}
但是,这不符合我的预期。我应该从MainActivity还是从适配器内部填充默认值?

尝试执行以下操作:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

LayoutInflater inflater = (LayoutInflater) mContext
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View view;

if(position == 0)
// Populate default item
else
// Populate from json
if(convertView == null){
    view = new View(mContext);
    view = inflater.inflate(R.layout.grid_item_text, null);

    TextView personName = (TextView) view.findViewById(R.id.textItem);
    ImageView personThumb = (ImageView) view.findViewById(R.id.iconItem);

    // IF HAVE RESULT
    if(mList.size() != 0){
        /* INITIALIZES PHOTO */
        BitmapFactory.Options bmOptions;
        bmOptions = new BitmapFactory.Options();
        bmOptions.inSampleSize = 1;

        /*
        Bitmap bmpThumb = loadBitmap(mList.get(position).accId, bmOptions, IMAGE_THUMB);

        if(bmpThumb != null){
            ImageHelper ih = new ImageHelper();
            bmpThumb = ih.getRoundedCornerBitmap(bmpThumb, 10);
            personThumb.setImageBitmap(bmpThumb);
        }else{
            personThumb.setImageResource(mThumbs);
        }
        */

        personThumb.setImageResource(mThumbs);
        personName.setText(mList.get(position).fullName.toString());
    }else{
        personThumb.setImageResource(mThumbs);
        personName.setText("Add Friends");
    }



}else{
    view = (View) convertView;
}
return view;

}

如果您使用数组或arraylist在gridview中绑定数据,则在第一个位置添加数据,而不是在添加JSON结果的数据之后添加数据。所以您可以将数据放在数组或arraylist的第一个位置。然后将其绑定到gridview。

您好,谢谢您的建议。虽然你的解决方案也是可能的,但我必须使用@Abhishek的答案。不过,我也赞成你的答案。