Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从插入Listview的数据中获取子节点?_Java_Android - Fatal编程技术网

Java 如何从插入Listview的数据中获取子节点?

Java 如何从插入Listview的数据中获取子节点?,java,android,Java,Android,我创建了一个Listview,并将SQLite数据库中的数据插入其中。Listview上的OnItemClick打开了另一个片段,但我只能访问listItem上显示的名称。如何获取其余的数据 使用getItemAtPosition(position.toString();适用于单击的项目,但不适用于其余数据。getChildAt(位置).toString();也不行。我也尝试过使用StringBuffer,但无法让它工作(我可能做得不对)。有人能帮我吗 public class FoodFrag

我创建了一个Listview,并将SQLite数据库中的数据插入其中。Listview上的OnItemClick打开了另一个片段,但我只能访问listItem上显示的名称。如何获取其余的数据

使用getItemAtPosition(position.toString();适用于单击的项目,但不适用于其余数据。getChildAt(位置).toString();也不行。我也尝试过使用StringBuffer,但无法让它工作(我可能做得不对)。有人能帮我吗

public class FoodFragment extends Fragment {


    ImageButton addFood;
    ListView listView;
    FoodDatabaseHelper mFoodDatabaseHelper;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_food, container, false);

        addFood = view.findViewById(R.id.addFood);
        listView = view.findViewById(R.id.caloriesEaten);
        mFoodDatabaseHelper = new FoodDatabaseHelper(getActivity());

        populateListview();


        return view;
    }

    private void populateListview(){
        //populate an ArrayList<String> from the database and then view it
        ArrayList<String> list = new ArrayList<>();
        Cursor data = mFoodDatabaseHelper.getData();
        if(data.getCount() == 0){
            Toast.makeText(getActivity(), "There are no contents in this list!",Toast.LENGTH_LONG).show();
        }else{
            while(data.moveToNext()){
                list.add(data.getString(1));
                ListAdapter listAdapter = new ArrayAdapter<>(getActivity(),android.R.layout.simple_list_item_1,list);
                listView.setAdapter(listAdapter);

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

                            //Get data from Listview
                            String food = parent.getItemAtPosition(position).toString();
                            String protein = listView.getChildAt(position).toString();
                            String fats = listView.getChildAt(position).toString();
                            String carbo = listView.getChildAt(position).toString();

                            Cursor data = mFoodDatabaseHelper.getFood(food);
                            int itemID = -1;
                            while (data.moveToNext()){
                                itemID = data.getInt(0);
                            }
                            if(itemID > -1){
                                FoodDetailFragment frt = new FoodDetailFragment();
                                FragmentTransaction transaction = getFragmentManager().beginTransaction();

                                //Send the relevant data to the FoodDetailFragment
                                Bundle bundle = new Bundle();
                                bundle.putString("foods", food);
                                bundle.putString("protein", protein);
                                bundle.putString("fats", fats);
                                bundle.putString("carbo", carbo);
                                frt.setArguments(bundle);
                                transaction.replace(R.id.fragment_container, frt);
                                transaction.addToBackStack(null).commit();

                            }else{
                                Toast.makeText(getActivity(), "No such ID ", Toast.LENGTH_LONG).show();
                            }
                    }
                });
            }
        }
    }
}
相反,它显示:

Bacon 

android.support.v7.widget.AppcompatTextView{82d2539V.ED..... ..... 0
0-974,123£1020014android:id/text1}

android.support.v7.widget.AppcompatTextView{82d2539V.ED..... ..... 0
0-974,123£1020014android:id/text1}

android.support.v7.widget.AppcompatTextView{82d2539V.ED..... ..... 0
0-974,123£1020014android:id/text1}
我不知道如何指出这个值。任何帮助都将非常感激

编辑:我现在更改了代码,试图跟随提供的链接。这使我能够得到孩子们的节点。我最终得到了这个。虽然不漂亮,但它很管用

public class FoodFragment extends Fragment {

    String food, proteins, fats, carbohydrates;
    ImageButton addFood;
    FoodDatabaseHelper foodDatabaseHelper;
    ListView listView;
    SQLiteDatabase sqLiteDatabase;
    ArrayList<HashMap<String, String>> foodlist;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_food, container, false);

        addFood = view.findViewById(R.id.addFood);
        listView = view.findViewById(R.id.caloriesEaten);
        foodDatabaseHelper = new FoodDatabaseHelper(getActivity());
        sqLiteDatabase = foodDatabaseHelper.getWritableDatabase();


        addFood.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TrackingFragment frt = new TrackingFragment();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.fragment_container, frt);
                transaction.addToBackStack(null).commit();
            }
        });

        foodlist = new ArrayList<>();
        populateListview();

        return view;
    }

    private void populateListview() {

        Cursor cursor = foodDatabaseHelper.getData();
        foodlist.clear();
        if (cursor.getCount() > 0) {
            cursor.moveToFirst();
            for (int i = 0; i < cursor.getCount(); i++) {
                food = cursor.getString(1);
                proteins = cursor.getString(2);
                fats = cursor.getString(3);
                carbohydrates = cursor.getString(4);

                HashMap<String, String> foods = new HashMap<>();
                foods.put("foods", food);
                foods.put("proteins", proteins);
                foods.put("fats", fats);
                foods.put("carbohydrates", carbohydrates);
                foodlist.add(foods);
                cursor.moveToNext();

            }
            ListAdapter adapter = new SimpleAdapter(getActivity(), foodlist, R.layout.fragment_food_items, new String[]{"foods", "proteins", "fats", "carbohydrates"}, new int[]{R.id.food, R.id.proteins, R.id.fats, R.id.carbs});
            listView.setAdapter(adapter);
        }
    }
公共类FoodFragment扩展了片段{
串食物、蛋白质、脂肪、碳水化合物;
食物;
FoodDatabaseHelper FoodDatabaseHelper;
列表视图列表视图;
SQLiteDatabase SQLiteDatabase;
ArrayList食物列表;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u食品,容器,假);
addFood=view.findviewbyd(R.id.addFood);
listView=view.findViewById(R.id.carorieseaten);
foodDatabaseHelper=新的foodDatabaseHelper(getActivity());
sqLiteDatabase=foodDatabaseHelper.getWritableDatabase();
addFood.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
TrackingFragment frt=新TrackingFragment();
FragmentTransaction=getFragmentManager().beginTransaction();
事务.替换(R.id.fragment_容器,frt);
transaction.addToBackStack(null.commit();
}
});
foodlist=newArrayList();
populateListview();
返回视图;
}
私有void populateListview(){
Cursor Cursor=foodDatabaseHelper.getData();
foodlist.clear();
if(cursor.getCount()>0){
cursor.moveToFirst();
对于(int i=0;i
您的代码存在一些主要问题:

  • 不要在while循环内初始化listview适配器和onItemClickListener()。它们应该在循环外

  • 如果希望在单击listitem时获取某个位置的所有数据,则应创建一个类并将该类的对象存储在列表中,而不仅仅是一个字符串


  • 此链接包含一些代码,可以帮助您更正您的问题。

    如果您遇到任何问题,请告诉我。如果这解决了您的问题,请将其标记为其他人可以遵循的答案。更新。通过此链接和其他内容,我使其正常工作。感谢您的帮助!
    public class FoodFragment extends Fragment {
    
        String food, proteins, fats, carbohydrates;
        ImageButton addFood;
        FoodDatabaseHelper foodDatabaseHelper;
        ListView listView;
        SQLiteDatabase sqLiteDatabase;
        ArrayList<HashMap<String, String>> foodlist;
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_food, container, false);
    
            addFood = view.findViewById(R.id.addFood);
            listView = view.findViewById(R.id.caloriesEaten);
            foodDatabaseHelper = new FoodDatabaseHelper(getActivity());
            sqLiteDatabase = foodDatabaseHelper.getWritableDatabase();
    
    
            addFood.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    TrackingFragment frt = new TrackingFragment();
                    FragmentTransaction transaction = getFragmentManager().beginTransaction();
                    transaction.replace(R.id.fragment_container, frt);
                    transaction.addToBackStack(null).commit();
                }
            });
    
            foodlist = new ArrayList<>();
            populateListview();
    
            return view;
        }
    
        private void populateListview() {
    
            Cursor cursor = foodDatabaseHelper.getData();
            foodlist.clear();
            if (cursor.getCount() > 0) {
                cursor.moveToFirst();
                for (int i = 0; i < cursor.getCount(); i++) {
                    food = cursor.getString(1);
                    proteins = cursor.getString(2);
                    fats = cursor.getString(3);
                    carbohydrates = cursor.getString(4);
    
                    HashMap<String, String> foods = new HashMap<>();
                    foods.put("foods", food);
                    foods.put("proteins", proteins);
                    foods.put("fats", fats);
                    foods.put("carbohydrates", carbohydrates);
                    foodlist.add(foods);
                    cursor.moveToNext();
    
                }
                ListAdapter adapter = new SimpleAdapter(getActivity(), foodlist, R.layout.fragment_food_items, new String[]{"foods", "proteins", "fats", "carbohydrates"}, new int[]{R.id.food, R.id.proteins, R.id.fats, R.id.carbs});
                listView.setAdapter(adapter);
            }
        }