9

这可能是一条很长的消息,但我想向所有 stackoverflow 用户提出一个明确的问题。我所做的是在绑定在我的gridview上的类中创建一个静态数组字符串

class ParserArrayList {
       //some declaration and codes here
      private String [] imageCaptionId = {
        "My First Medal",
        "You ...",
        "The ...",
        "Gimme ...",
        "A ...",
        "Seven ...",
        ".....City",
        ".... Madness",
        "Loyal...",
        ".....",
        "...",
        "Champion..."
        };
}

并在公共类 ImageAdapter 上手动绑定它扩展 BaseAdapter

public class ImageAdapter extends BaseAdapter{
//some declaration and variables here
   public View getView(int position, View convertView, ViewGroup parent) {
        View v;

        ParserArrayList arrayImage = new ParserArrayList();
        String[] imagetext = arrayImage.getImageCaptionId(); 
        if (convertView == null) {
        //some stuff here
        }
//some stuff here
return v;
}

如您所见,我正在调用 ParserArrayList 的 'imageCaptionId' 并将其发送到我声明 'imagetext' 的另一个数组字符串

一切正常,直到我发现数组'imageCaptionId'必须基于本地数据库我尝试使用此代码但我无法完成,因为

class ParserArrayList {
//added this code
public SQLiteAdapter sqlAdapter;
//and this one
public void showData(){
    sqlAdapter = new SQLiteAdapter(this);

    String str = "Select dTitle from achievement_tb where version =0 order by ID ASC;";

    sqlAdapter.openToRead();

    Cursor c =sqlAdapter.read(str);

    sqlAdapter.close();
}
}

第一:我不知道如何将它绑定到数组

第二:我在 ParserArrayList 中创建了它,它给了我一个错误,说 构造函数 SQLiteAdapter(ParserArrayList) 未定义(这已经完成)

你能帮我吗先生

编辑 这是我想要完成的或我的逻辑

在我的 ParserArrayList 类上,我正在尝试添加此代码(我不知道这是否正确)

    public String[] showImageCaption(){
    String imageCaptionIds [];
    sqlAdapter = new SQLiteAdapter(mContext);

    String str = "Select dTitle from achievement_tb where version =0 order by ID ASC;";

    sqlAdapter.openToRead();

    Cursor c =sqlAdapter.read(str);     
    imageCaptionIds [c.getCount()];

    sqlAdapter.close();
    return imageCaptionIds;
}

这给了我一个错误,说语法错误,插入“AssignmentOperator Expression”以完成表达式

现在在我的 ImageAdapter 扩展 BaseAdapter 这是我的代码

 public View getView(int position, View convertView, ViewGroup parent) {
        View v;
        ParserArrayList arrayImage = new ParserArrayList(mContext);
        newArrayList2 = arrayImage.getArraylist();
        **String[] imagetext = arrayImage.showImageCaption();** 
        if (convertView == null) {  // if it's not recycled, initialize some attributes
             LayoutInflater li = getLayoutInflater();
             v = li.inflate(R.layout.medal_grid, null);
        }
        else
        {
             v = convertView;
        }
        TextView tv = (TextView)
        v.findViewById(R.id.grid_item_label);
        **tv.setText(imagetext[position]);**
        ImageView iv = (ImageView)v.findViewById(R.id.grid_item_image);
        iv.setImageResource((Integer) newArrayList2.get(position));
        return v;
    }

我的逻辑是我将它绑定到 ParserArrayList 内的 String 数组(它将在其中返回 imageCaptionIds)并将其设置在 textview

4

1 回答 1

1

我不明白第一个问题,但第二个很容易。

您需要将 Context(或扩展 Context 的类,如 Activity)传递给new SQLiteAdapter(). 只需更改您的 ParserArrayList 以匹配此:

public class ParserArrayList {
    Context mContext;
    ...

    public ParserArrayList(Context context) { 
        mContext = context;
        ... 
    }

    public void showData(){
        sqlAdapter = new SQLiteAdapter(mContext);
        ...
    }
}

在您的 Activity 中,可能是 onCreate(),只需调用:

 ParserArrayList pal = new ParserArrayList(this);

我将尝试回答第一个问题。为什么必须将您的 String 数组放入 a 中SQLiteDatabase?AnArrayAdapter<String>非常适用于字符串数组......为什么这样的东西不起作用?

public class ImageAdapter extends ArrayAdapter<String> {
    //some declaration and variables here

    public View getView(int position, View convertView, ViewGroup parent) {
        View v;

        String imagetext = getItem(position); // returns the caption at index
        if (convertView == null) {
            //some stuff here
        }

        //some stuff here
        return v;
    }
}

声明:

private String [] imageCaptionId = { ... };
ImageAdapter adapter = new ImageAdapter(this, R.layout.awesome, imageCaptionId);
于 2012-09-04T04:28:19.807 回答