2011-11-05 29 views
0

我有簡單的ListView來擴展BaseAdapter。我在每一行都有一個微調器和按鈕。如何在ListView中找到微調器的位置,以便我必須獲得每個微調器的selectedItem()?Android如何在我的自定義列表視圖中查找微調器位置

private class MyCustomAdapter extends BaseAdapter { 
private Activity activity; 
private String[] estimated, price, image; 
private LayoutInflater inflater=null; 
public ViewHolder holder; 
public ProductImageLoader imageLoader; 
private ArrayList<String> arraylist4; 
SQLiteDatabase db; 
View vi; 

public MyCustomAdapter(SubMenu subMenu, String[] estimated, String[] price, String[] image) { 
// TODO Auto-generated constructor stub 
this.activity = subMenu; 
this.estimated = estimated; 
this.price = price; 
this.image = image; 
inflater = (LayoutInflater)getParent().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
imageLoader=new ProductImageLoader(activity.getParent()); 

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

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

@Override 
public long getItemId(int position) { 
// TODO Auto-generated method stub 
return position; 
} 
public class ViewHolder{ 
public TextView text; 
public TextView text1; 
public ImageView image_view; 
public Button button, add_btn; 
public Spinner spinner; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    vi=convertView; 

if(convertView==null){ 

    vi = inflater.inflate(R.layout.submenu_items, null); 
    holder=new ViewHolder(); 
    holder.text=(TextView)vi.findViewById(R.id.food_name); 
    holder.text1=(TextView)vi.findViewById(R.id.prize); 
    holder.image_view=(ImageView)vi.findViewById(R.id.imageview); 
    holder.button=(Button)vi.findViewById(R.id.detail_btn); 
    holder.add_btn=(Button)vi.findViewById(R.id.addorder_btn); 
    holder.spinner=(Spinner)vi.findViewById(R.id.spinner); 
    vi.setTag(holder); 
    } 
else 
    holder=(ViewHolder)vi.getTag(); 

holder.text.setText(estimated[position]); 
holder.text1.setText(price[position]); 
holder.image_view.setTag(image[position]); 
imageLoader.DisplayImage(image[position], activity, holder.image_view); 
holder.button.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
Bundle bundle = new Bundle(); 
bundle.putString("url", image[position]); 
bundle.putString("description", description[position]); 
Log.d("url",""+description[position]); 

Intent intent = new Intent(SubMenu.this,FoodDetailPage.class); 
intent.putExtras(bundle); 
TabGroupActivity parentActivity = (TabGroupActivity)getParent(); 
parentActivity.startChildActivity("FoodDetailPage", intent); 
} 

}); 
holder.add_btn.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     Log.d("row spinner", ""+holder.spinner.getChildAt(position)); 
     try { 
      db = SQLiteDatabase.openDatabase("data/data/com.android.restaurant1 /Restaurant", null, SQLiteDatabase.CREATE_IF_NECESSARY); 
      db.beginTransaction(); 
      db.execSQL("insert into table1(MenuName, Count, Price) values('"+estimated[position]+"', '"+holder.spinner.getSelectedItem()+"', '"+price[position]+"')"); 
      db.setTransactionSuccessful(); 
      db.endTransaction(); 
      db.close(); 
     } 
     catch(SQLException e) { 

     } 
    } 
}); 
return vi; 

}

+2

你試過了嗎?發表一些代碼。 – Venky

+0

如何在ListView中查找微調器的位置?哪個位置? –

+0

我附上用於我的自定義列表適配器的代碼 –

回答

1

在您的自定義適配器類,試圖實現微調聽者getView()方法,並存儲到一個整數數組。

final int[] positions=new int[2]; //[0] for listitem position, [1] for spinner postion 
     Spinner sp=findViewByID(R.id.spinner); 

     sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       positions[0]=listItemSelectedposition; 
       positions[1]=arg2; 


      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
+0

在我的代碼中,我想獲取微調器的selectedItem並將其存儲在數據庫中。所以,如果我從listView的第一行中選擇了spinnerItem,我想要在列表視圖中獲得該微調器的位置。 –

+0

你必須爲列表視圖實現setOnitemClicListener並獲取位置。 –

1
Spinner user_type user_type = (Spinner) findViewById(R.id.spinner1); 
user_type.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) {       
    Log.i("Position ", "is "+pos); 
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
    } 
}); 
+0

在我的代碼中,我想獲取微調器的selectedItem並將其存儲在數據庫中。所以,如果我從listView的第一行中選擇了spinnerItem,我想要在列表視圖中獲得該微調器的位置。 –

+0

你可以向我展示你在列表視圖中使用微調器的代碼嗎? –

+0

我用我的代碼編輯過我的帖子。 –

0

您必須使用getView方法中下面的代碼:

int spinnerPosition; 

user_type 
       .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
        public void onItemSelected(AdapterView<?> parent, 
          View view, int pos, long id) { 
          spinnerPosition=pos; 
          String usertype; 
          usertype = parent.getItemAtPosition(spinnerPosition).toString(); 


         Log.i("Position ", "is "+spinnerPosition); 
         Log.i("Item ", "is "+usertype); 
        } 

        public void onNothingSelected(AdapterView<?> parent) { 
        } 
       }); 

然後你就可以在這行代碼中使用spinnerPosition:

Log.d("row spinner", ""+holder.spinner.getChildAt(spinnerPosition)); 

及其它地方也。

相關問題