gpt4 book ai didi

android - fragment 中的自定义数组适配器

转载 作者:太空狗 更新时间:2023-10-29 13:26:38 26 4
gpt4 key购买 nike

我是 Andriod 的新手。我已经尝试了很多次,但很长一段时间以来一直被困在这个问题上。我有一个名为 ProductListActivity 的 Activity ,在这个 Activity 中我有一个 fragment 。现在我想显示列表,为此我创建了自己的自定义数组适配器。当我不使用 fragment 但 fragment 给我 NullPointerException 时,它工作正常。我调试我的代码。请帮帮我。谢谢你的考虑。我在这里粘贴我的代码。

Activity 类:

public class ProductListActivity extends Activity implements ProductInterface{
public static String cookie;
public static String jsonSettingsResponse;
public static String[] tids;
public static String jsonPorductsCategoryListResponseString;
public JSONArray jsonPorductsCategoryListResponseArray;
public static String vid;
public static String publicPath;
public static JSONArray productsList;
public ArrayList<String> listItems;
public String[] listProCategory;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.product_category_and_list);
Intent intent = getIntent();
cookie = intent.getStringExtra(BConstant.WEB_SERVICES_COOKIES);
productsList = new JSONArray();
FetchProductCategories products = new FetchProductCategories();
productsList = products.fetchProducts();
listProCategory = products.onDisplayProductList(productsList).toArray(
new String[0]);

Bundle bundle = new Bundle();
bundle.putString(BConstant.WEB_SERVICES_COOKIES, cookie);
bundle.putString(BConstant.PUBLIC_PATH, publicPath);
bundle.putStringArray(BConstant.TAXONOMY_TID, tids);
bundle.putStringArray(BConstant.PRODUCT_CATEGORY_NAMES, listProCategory);
ProductCategoryFragment productCategoryFragment = new ProductCategoryFragment();
FragmentManager manager = getFragmentManager();
productCategoryFragment.setArguments(bundle);

}

private class FetchProductCategories {
protected JSONArray fetchProducts(String... params) {
jsonSettingsResponse = WebserviceBUtil
.callWebServicesGetVocabularyList(cookie);
vid = JSONUtil.parseJSONResponse(jsonSettingsResponse,
BConstant.TAXONOMY_VID);
publicPath = JSONUtil.parseJSONResponse(jsonSettingsResponse,
BConstant.PUBLIC_PATH);
jsonPorductsCategoryListResponseString = WebserviceBUtil
.callWebServicesGetProductsList(cookie, vid);
tids = ProductCategoryIds.parseJSONResponseToGetTidsOfProducts(
jsonPorductsCategoryListResponseString,
BConstant.TAXONOMY_TID);
try {
jsonPorductsCategoryListResponseArray = new JSONArray(
jsonPorductsCategoryListResponseString);
} catch (JSONException e) {
e.printStackTrace();
}
return jsonPorductsCategoryListResponseArray;
}


protected ArrayList<String> onDisplayProductList(JSONArray result) {
listItems = new ArrayList<String>();
for (int i = 0; i < result.length(); i++) {
try {
listItems
.add(result.getJSONObject(i)
.getString(BConstant.NAME_CONSTANT)
.toString());
} catch (Exception ex) {
ex.printStackTrace();
}
}
return listItems;
}
}


@Override
public HashMap<Integer, Bitmap> DownloadImages(HashMap<Integer, String> productCategoryImagePath) {
HashMap<Integer, Bitmap> imgBitmap = new HashMap<Integer, Bitmap>();
for (int pos = 0; pos < productCategoryImagePath.size(); pos++) {
Bitmap bval = ImageDownloader
.getBitmapFromURL(productCategoryImagePath.get(pos));
imgBitmap.put(pos, bval);
}
return imgBitmap;

}
}

fragment 类:

public class ProductCategoryFragment extends Fragment {
ProductInterface productInterface;
private static String[] tids;
private static HashMap<Integer, String> productCategoryImagePath;
private static String jsonPorductsDetailsImagePathResponse;
private static String publicPath;
private static String cookie;
public String[] listProCategory;
public ListView listOfProductsCategory;
private static HashMap<Integer, Bitmap> imgBitmapUrls;
DisplayProductListArrayAdapter adapter;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragProcatView = inflater.inflate(R.layout.product_category_list, container,
false);
listOfProductsCategory = (ListView) getActivity().findViewById(R.id.productCategorylistView);
return fragProcatView;

}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
publicPath = getArguments().getString(BConstant.PUBLIC_PATH);
cookie = getArguments().getString(BConstant.WEB_SERVICES_COOKIES);
tids = getArguments().getStringArray(BConstant.TAXONOMY_TID);
listProCategory = getArguments().getStringArray(
BConstant.PRODUCT_CATEGORY_NAMES);
Bundle b = getActivity().getIntent().getExtras();
publicPath = b.getString(BConstant.PUBLIC_PATH);
cookie = b.getString(BConstant.WEB_SERVICES_COOKIES);
tids =b.getStringArray(BConstant.TAXONOMY_TID);
listProCategory =b.getStringArray(
BConstant.PRODUCT_CATEGORY_NAMES);
productInterface = (ProductInterface) getActivity();
productCategoryImagePath = new HashMap<Integer, String>();
for (int i = 0; i < tids.length; i++) {
jsonPorductsDetailsImagePathResponse = WebserviceBUtil
.callWebServicesGetProductsDetails(cookie, tids[i]);
String filename = ProductCategoryIds
.parseJSONResponseToGetVidOfProductsFromVocabulary(
jsonPorductsDetailsImagePathResponse,
BConstant.FILE_NAME);
String completeUrl = publicPath + filename;
productCategoryImagePath.put(i, completeUrl);
}
imgBitmapUrls = productInterface
.DownloadImages(productCategoryImagePath);
adapter = new DisplayProductListArrayAdapter(
getActivity(), listProCategory,
imgBitmapUrls);
listOfProductsCategory.setAdapter(adapter);
}


/**
* ExtendsArrayAdapterClassToDisplayCustomListView
*/
public class DisplayProductListArrayAdapter extends ArrayAdapter<String> {

Context context;
HashMap<Integer, Bitmap> prodctImgs;
String[] proCategoryNames;
HashMap<Integer, Bitmap>biturls;
DisplayProductListArrayAdapter(Context c,
String[] listCategory, HashMap<Integer, Bitmap> imgUrls) {
super(c,
R.layout.product_category_single_layout,
R.id.productCategoryName, listCategory);
this.context = c;
this.prodctImgs = imgUrls;
this.proCategoryNames = listCategory;
this.biturls = imgUrls;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
//LayoutInflater inflater = (LayoutInflater) context
// .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater=((Activity)context).getLayoutInflater();
View row = inflater.inflate(R.layout.product_category_single_layout,parent,false);
ImageView productCategoryImage = (ImageView) row
.findViewById(R.id.productCategoryImageId);
Bitmap bitmap = imgBitmapUrls.get(position);
// productCategoryImage.setFocusable(false);
TextView productCategoryName = (TextView) row
.findViewById(R.id.productCategoryName);
productCategoryImage.setImageBitmap(bitmap);
productCategoryName.setText(proCategoryNames[position]);
return row;
}
}
}

最佳答案

改变

listOfProductsCategory = (ListView) getActivity().findViewById(R.id.productCategorylistView);

listOfProductsCategory = (ListView) fragProcatView .findViewById(R.id.productCategorylistView);

findViewById 在当前 infalted 布局中查找具有 id 的 View 。因此,请使用 View 对象来初始化您的 ListView 。

编辑:

你做这样的事情

  static ProductCategoryFragment newInstance(int num) {
ProductCategoryFragment f = new ProductCategoryFragment();

// Supply num input as an argument.
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);

return f;
}

然后

int value = getArguments().getInt("num");

Activity 中

 ProductCategoryFragment newFragment = ProductCategoryFragment.newInstance(10);

关于android - fragment 中的自定义数组适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20673956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com