2016-03-21 10 views
-2

カスタムアダプタを使用してリストビューに値を設定しようとすると、最後に入力した値のみがハッシュマップに表示されます。ハッシュマップは静的です。なぜ私はハッシュマップで使用されているそのキーのハッシュマップのすべての値を取得していないのか分かりません。ここ 私のコードカスタムアダプタを使用してリストビューに値を設定できません

public class Nextclass extends Activity { 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.nextclass); 
list = (ListView)findViewById(R.id.list1); 

    SelectItems(); 
    ViewItems(); 
} 

private List<Map<String, String>> SelectItems() { 
// TODO Auto-generated method stub 
try { 

     datas = new ArrayList<Map<String, String>>(); 
    DatabaseHelper dbHelper = new  DatabaseHelper(this.getApplicationContext()); 
    newDB = dbHelper.getWritableDatabase(); 
    Cursor c = newDB.rawQuery("select distinct code ,desc ,name " 
      + " from item", null); 


     while (c.moveToNext()){ 


     String cod = c.getString(c.getColumnIndex("code")); 
     datanums.put("code", cod); 
     String desc1 = c.getString(c.getColumnIndex("desc")); 
     datanums.put("desc", desc1); 
     String name = c.getString(c.getColumnIndex("name")); 
     datanums.put("name", name); 
       datas.add(datanums); 
     } 

    } catch (SQLiteException se) { 
     Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
     } 
    return datas; 
} 
private void ViewItems() { 

// TODO Auto-generated method stub 

arrTemp = new String[datas.size()]; 


MyListAdapter myListAdapter = new MyListAdapter(); 
list.setAdapter(myListAdapter); 
Log.v("list itemm",datas.toString()); 


} 

public class MyListAdapter extends BaseAdapter{ 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    if(datas != null && datas.size() != 0){ 
     return datas.size();  
    } 
    return 0; 
} 

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

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    final ViewHolder holder; 
    if (convertView == null) { 

     holder = new ViewHolder(); 
     LayoutInflater inflater = Orders.this.getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.order_simple_row, null); 
     holder.textView1 = (TextView) convertView.findViewById(R.id.name); 
     holder.textView2 = (TextView) convertView.findViewById(R.id.code); 
     holder.textview3 = (TextView) convertView.findViewById(R.id.desc); 
     holder.editText1 = (EditText) convertView.findViewById(R.id.cases); 


     convertView.setTag(holder); 

    } else { 

     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.ref = position; 

    holder.textView1.setText(datanums.get("name")); 
    holder.textview3.setText(datanums.get("code")); 
    holder.textView2.setText(datanums.get("desc")); 
    holder.editText1.setText(arrTemp[position]); 


     holder.editText1.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
       arrTemp[holder.ref] = arg0.toString(); 
      } 
     }); 

     return convertView; 
    } 

private class ViewHolder { 

    public Object list; 
    TextView textView1,textView2,textview3; 
EditText editText1,editText2; 
    int ref; 
    } 


    return convertView; 
} 

private class ViewHolder { 

public Object list; 
TextView textView1,textView2,textview3; 
EditText editText1; 
int ref; 
} 

help.Iを使用すると、配列リストではなく、あなたがしようとしているアダプタでハッシュマップを追加している

+0

あなたの完全なアクティビティコードをoncreateメソッドで置きます。これは半分のコードのようです。 –

+0

なぜアダプタコンストラクタでhashmapを渡さないのですか? – Pankaj

+0

なぜあなたは 'SimpleCursorAdapter'を使いませんか? – pskink

答えて

0
holder.textView1.setText(datas.get(position).get("name")); 
    holder.textview3.setText(datas.get(position).get("code")); 
    holder.textView2.setText(datas.get(position).get("desc")); 

事前に別の方法ではなく、worked.thanksを使用してくださいハッシュマップオブジェクトを返すarraylistから値を取る必要があるのではなく、キーの値を取得する必要があるオブジェクトから、ハッシュマップからデータを取得します。

これが役に立ちます。

+0

私はこれをちょっと試しました。しかし、コードを実行すると、空のテキストビューがリストに表示されます。 – Bivin

+0

データが空であるということは、データサイズごとに行数を取得しているため、リストにデータを入力するタイミングを確認する必要があります。また、whileループの前にc.moveToFirst()を配置してください。 –

+1

私はコードをチェックしました。次に、テキストビューに値を出力することができます。しかし、すべての列のハッシュマップで最後に入力された値を取得します。リストビューで値を表示する別の方法がありますか? – Bivin

関連する問題