Java 如何从插入Listview的数据中获取子节点?
我创建了一个Listview,并将SQLite数据库中的数据插入其中。Listview上的OnItemClick打开了另一个片段,但我只能访问listItem上显示的名称。如何获取其余的数据 使用getItemAtPosition(position.toString();适用于单击的项目,但不适用于其余数据。getChildAt(位置).toString();也不行。我也尝试过使用StringBuffer,但无法让它工作(我可能做得不对)。有人能帮我吗Java 如何从插入Listview的数据中获取子节点?,java,android,Java,Android,我创建了一个Listview,并将SQLite数据库中的数据插入其中。Listview上的OnItemClick打开了另一个片段,但我只能访问listItem上显示的名称。如何获取其余的数据 使用getItemAtPosition(position.toString();适用于单击的项目,但不适用于其余数据。getChildAt(位置).toString();也不行。我也尝试过使用StringBuffer,但无法让它工作(我可能做得不对)。有人能帮我吗 public class FoodFrag
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
您的代码存在一些主要问题:
此链接包含一些代码,可以帮助您更正您的问题。如果您遇到任何问题,请告诉我。如果这解决了您的问题,请将其标记为其他人可以遵循的答案。更新。通过此链接和其他内容,我使其正常工作。感谢您的帮助!
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);
}
}