2017-04-21 59 views
0

我有一個數據庫映像名稱,我有兩列 第一列的名稱:圖 第二列的名稱:名稱 我想向他們展示在列表視圖 有顯示名稱 沒有問題,但顯示圖片時出現問題解決方法是什麼?檢索源碼

Adbter列表視圖

public class adbter_listview extends ArrayAdapter<String> { 

    Activity activity; 
    ArrayList<Integer> icons; 
    ArrayList<String> name; 

    public adbter_listview(Activity activity, ArrayList<Integer> icons, ArrayList<String> name) { 
     super(activity, R.layout.custom_listview, name); 
     this.activity = activity; 
     this.icons = icons; 
     this.name = name; 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = activity.getLayoutInflater(); 
     View v = inflater.inflate(R.layout.custom_listview, parent, false); 
     ImageView iv = (ImageView) v.findViewById(R.id.imageView); 
     TextView tv = (TextView) v.findViewById(R.id.textView); 
     iv.setImageResource(icons.get(position)); 
     tv.setText(name.get(position)); 
     return v; 
    } 
} 

MainActivity

public class MainActivity extends AppCompatActivity { 

    ListView con; 
    ArrayList<String> icons_name = new ArrayList<>(); 
    ArrayList<Integer> icons = new ArrayList<>(); 
    ArrayList<String> name = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     con = (ListView) findViewById(R.id.con); 


     db connect = new db(MainActivity.this); 
     SQLiteDatabase read = connect.getReadableDatabase(); 
     Cursor save = read.rawQuery("select image from game",null); 
     save.moveToFirst(); 

     while(save.isAfterLast()==false) 
     { 
      icons_name.add(save.getString(0)); 
      icons.add(R.drawable.user); 
      save.moveToNext(); 
     } 


     adbter_listview adb = new adbter_listview(MainActivity.this,icons,name); 
     con.setAdapter(adb); 

    } 

} 

請幫我

+0

'但顯示圖片有問題?哪個問題?怎麼了? –

+0

你的列名是Img和Name,但你選擇的是'image'?另外,你正在向圖標的數組列表添加可繪製資源,而不是從你的數據庫中刪除 –

回答

0

獲取INT的繪製使用此行ID,

int drawableResourceId = this.getResources().getIdentifier("nameOfDrawable", "drawable", this.getPackageName()); 

你的情況

nameOfDrawable = save.getString(0);我想

然後加入到圖標ArrayList中,

icons.add(drawableResourceId); 

希望這會工作。

+0

不工作:(//////// while(save.isAfterLast()== false){String nameOfDrawable = save.getString(0); int drawableResourceId = this.getResources()。getIdentifier(「nameOfDrawable」,「drawable」,this.getPackageName()); icons_name.add(nameOfDrawable); icons.add(Integer.parseInt(save.getString(0))); save.moveToNext();} –

+0

請你可以幫我:) –

+0

nameOfDrawable不應該是字符串,把變量名放在那裏。 write,drawableResourceId = this.getResources()。getIdentifier(nameOfDrawable,「drawable」,this.getPackageName()); – Exigente05

0

取而代之的是

icons.add(R.drawable.user); 

使用

icons.add(Integer.parseInt(save.getString(1))); 

適配器如果圖像是從繪圖資源文件夾它應該只工作,並使用它像

R.drawable.icons.get(position) 

但首先刪除數據庫調用來自oncreate mainThread調用另一個線程。要麼創建一個新的線程或使用asynctask或使用裝載機。不要在mainthread中進行sqlitedatabase調用。

+0

不工作:(//////// while(save.isAfterLast()== false) { String nameOfDrawable = save.getString(0); int drawableResourceId = this.getResources()。getIdentifier(「 nameOfDrawable「,」drawable「,this.getPackageName()); icons_name.add(nameOfDrawable); icons.add(Integer.parseInt(save.getString(0))); 保存。使用MoveToNext(); } –

+0

請你可以幫我:) –

+0

是否只能繪製文件夾中的所有圖像?那麼你爲什麼從sqlite數據庫中獲取?它是用於任何項目還是您正在學習? – Ari