2015-05-24 225 views
-1

你好朋友我有問題項目點擊聽衆ListView在android ...我的代碼告訴我正確的位置的項目,但不正確的名稱我需要幫助...在Android新的Im ...android listview item點擊

這裏是我的代碼

public void listView(){ 

      listView = (ListView)findViewById(R.id.list_View); 
      final String[][] projections = {{Food.NewDishInfo.DISH_CALORIE, Food.NewDishInfo.DISH_FAT}}; 
      final String selection = Food.NewDishInfo.DISH_NAME+" LIKE ?"; 
      String[] selection_args = new String[]{"dish_name"}; 
      final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.row_layout,selection_args); 
      listView.setAdapter(adapter); 
      listView.setOnItemClickListener(
      new AdapterView.OnItemClickListener(){ 
       @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

        String selection_args = "You selected " + 
          String.valueOf(adapterView.getItemAtPosition(i)); 

        Toast.makeText(DataListActivity.this,"position : " + i +selection_args, Toast.LENGTH_LONG).show(); 

       } 
      }); 
     } 

這是我的名單適配器代碼.....

public class ListDataAdapter extends ArrayAdapter { 
    List list = new ArrayList(); 
    public ListDataAdapter(Context context, int resource) { 

     super(context, resource); 
    } 
    static class LayoutHandler{ 
     TextView name,calorie,fat; 
    } 

    @Override 
    public void add(Object object) { 
     super.add(object); 
     list.add(object); 

    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     LayoutHandler layoutHandler; 
     if (row == null) 
     { 
      LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = layoutInflater.inflate(R.layout.row_layout,parent,false); 
      layoutHandler = new LayoutHandler(); 
      layoutHandler.name = (TextView)row.findViewById(R.id.text_dish_name); 
      layoutHandler.calorie = (TextView)row.findViewById(R.id.text_dish_calorie); 
      layoutHandler.fat = (TextView)row.findViewById(R.id.text_dish_fat); 
      row.setTag(layoutHandler); 
     } 
     else 
     { 
      layoutHandler = (LayoutHandler) row.getTag(); 

     } 
     DataProvider dataProvider = (DataProvider)this.getItem(position); 
     layoutHandler.name.setText(dataProvider.getName()); 
     layoutHandler.calorie.setText(dataProvider.getCalorie()); 
     layoutHandler.fat.setText(dataProvider.getFat()); 


     return row; 
    } 
} 

datalistactivity代碼...

import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.List; 


public class DataListActivity extends ActionBarActivity { 
    ListView listView; 
    SQLiteDatabase sqLiteDatabase; 
    FoodDbHelper foodDbHelper; 
    Cursor cursor; 
    ListDataAdapter listDataAdapter; 

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

     listView = (ListView)findViewById(R.id.list_View); 
     listDataAdapter = new ListDataAdapter(getApplicationContext(),R.layout.row_layout); 
     listView.setAdapter(listDataAdapter); 
     foodDbHelper = new FoodDbHelper(getApplicationContext()); 
     sqLiteDatabase = foodDbHelper.getReadableDatabase(); 
     cursor = foodDbHelper.getInformations(sqLiteDatabase); 
     if (cursor.moveToFirst()) 
     { 
      do { 
       String name,calorie,fat; 
       name = cursor.getString(0); 
       calorie = cursor.getString(1); 
       fat = cursor.getString(2); 
       DataProvider dataProvider = new DataProvider(name,calorie,fat); 
       listDataAdapter.add(dataProvider); 

      }while (cursor.moveToNext()); 
     } 
    } 

    public void listView(){ 

     List list = new ArrayList(); 
     ArrayListt ArrayListt = null; 


     listView = (ListView)findViewById(R.id.list_View); 
     final String ArrayListtt = new String((char[]) null); 
     final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.row_layout, Integer.parseInt(ArrayListtt)); 
     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(
       new AdapterView.OnItemClickListener(){ 
        @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

         String ArrayListtt = "You selected " + 
           String.valueOf(adapterView.getItemAtPosition(i)); 

         Toast.makeText(DataListActivity.this, "position : " + i + ArrayListtt, Toast.LENGTH_LONG).show(); 

        } 



       }); 
    } 



} 

回答

1

使用此代碼

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      Toast.makeText(getApplicationContext(), 
        "dish name is : " + dataprovider.getName(), Toast.LENGTH_SHORT).show(); 

可能會有所幫助

0

好做以下 第1步: 創建的HashMap(這是適配器以外)

HashMap<Integer, Integer> selectedItems = new HashMap<Integer, Integer>(); 

第2步:

選中該複選框點擊在HashMap中增加你的價值(關鍵是你的位置和數值是卡路里) 例如:

layoutHandler.names.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
selectedItems.put(position, your_calory_values); 
}}); 

第3步:

當用戶點擊按鈕和做

sum_button.setOnclickL.... 
{ 
float sum = 0.0f; 
      for (float f : selectedItems.values()) { 
       sum += f; 
      } 
      Log.e("x", sum+"**"); 
Toast.makeText(DataListActivity.this, sum+"**", Toast.LENGTH_LONG).show(); 

} 

編輯:

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     int listPos = listView.getPositionForView(buttonView); 
     DataProvider item = (DataProvider) listDataAdapter.getItem(listPos); 
     Log.i("", ""); 
     CheckBox names = (CheckBox) findViewById(R.id.checkBox1); 

     selectedItems.put(listPos, Integer.valueOf(dataProvider.getCalorie()));  
     CheckBox checkBox = (CheckBox) buttonView; 
     final DataProvider dataProvider = (DataProvider) checkBox.getTag(); 
     Toast.makeText(getApplicationContext(), 
       "Click on : " + dataProvider.getName()+ checkBox.getText() + 
         " " + checkBox.isChecked(), 
       Toast.LENGTH_SHORT).show(); 
     dataProvider.setSelected(checkBox.isChecked()); 
+0

你好兄弟如何在hashmap中添加velue dataProvider.setSelected(checkBox.isChecked());這行添加我的所有簽入dataprovider,然後我可以通過按鈕訪問它...但我怎麼能在hashmap中添加值 –

+0

檢查我下面的複選框代碼 –

+0

聲明此行最終HashMap selectedItems = new HashMap ();在Activity類中,不需要final。以下就足夠了 HashMap selectedItems = new HashMap (); – Amsheer