- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 android 的新手。我已经尝试过但无法找出我缺少的东西。我正在使用两个 fragment 两个显示列表。现在我想在用户单击第一个列表项时更改第二个 fragment 中的列表数据。默认情况下,将选择零位置索引来显示第二个列表中的数据。我正在使用自定义数组适配器在两个 fragment 中显示列表。请帮帮我。谢谢你的考虑。我在这里粘贴我的代码:
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.newInstance(bundle);
Bundle bundleForProductList = new Bundle();
bundleForProductList.putStringArray(BConstant.TAXONOMY_TID, tids);
bundleForProductList.putString(BConstant.WEB_SERVICES_COOKIES, cookie);
ProductListFragment.newInstance(bundleForProductList);
}
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
.callWebServicesGetProductsCategoryList(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;
}
@Override
public void clickedProductCategory(String tid) {
FragmentManager productListFragmentManager = getFragmentManager();
ProductListFragment productListFragment = (ProductListFragment) productListFragmentManager
.findFragmentById(R.id.proListfragment);
productListFragment.clickedProductCategoryIdByProductCategoryFragment(tid);
}
第一个 fragment :
public class ProductCategoryFragment extends Fragment implements OnItemClickListener{
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 static String[] listProCategory;
public ListView listOfProductsCategory;
private static HashMap<Integer, Bitmap> imgBitmapUrls;
DisplayProductCategoryListArrayAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragProcatView = inflater.inflate(R.layout.product_category_list, container,
false);
listOfProductsCategory =(ListView) fragProcatView .findViewById(R.id.productCategorylistView);
return fragProcatView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
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 DisplayProductCategoryListArrayAdapter(
getActivity(), listProCategory,
imgBitmapUrls);
listOfProductsCategory.setAdapter(adapter);
listOfProductsCategory.setOnItemClickListener(this);
}
static ProductCategoryFragment newInstance(Bundle bundle) {
ProductCategoryFragment productCategoryFragment = new ProductCategoryFragment();
productCategoryFragment.setArguments(bundle);
cookie = bundle.getString(BConstant.WEB_SERVICES_COOKIES);
tids = bundle.getStringArray(BConstant.TAXONOMY_TID);
publicPath = bundle.getString(BConstant.PUBLIC_PATH);
listProCategory = bundle.getStringArray(BConstant.PRODUCT_CATEGORY_NAMES);
return productCategoryFragment;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String clickedItemName = (String) listOfProductsCategory
.getItemAtPosition(position);
int clickedItemId = (int) listOfProductsCategory
.getItemIdAtPosition(position);
Toast.makeText(this.getActivity(),
"Product is getting load : " + clickedItemName,
Toast.LENGTH_SHORT).show();
productInterface.clickedProductCategory(tids[clickedItemId]);
}
public class DisplayProductCategoryListArrayAdapter extends ArrayAdapter<String> {
Context context;
HashMap<Integer, Bitmap> prodctImgs;
String[] proCategoryNames;
HashMap<Integer, Bitmap>biturls;
DisplayProductCategoryListArrayAdapter(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=((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;
}
}
}
第二个 fragment :
public class ProductListFragment extends Fragment implements OnItemClickListener{
private static HashMap<Integer, Bitmap> imgBitmapUrls;
public ListView listOfProducts;
ProductInterface productInterfaceForProductList;
private static String jsonPorductsCategoryListResponse;
private static String cookie;
private static String[] productImgPath;
private static String[] nids;
private static String[] title;
private static String[] tids;
private String tid;
private static HashMap<Integer, String> productListImagePath;
DisplayProductListArrayAdapter proListAdapter;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState ) {
View fragProListView = inflater.inflate(R.layout.product_category_list, container,
false);
listOfProducts =(ListView) fragProListView .findViewById(R.id.productCategorylistView);
return fragProListView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
productInterfaceForProductList = (ProductInterface) getActivity();
jsonPorductsCategoryListResponse = WebserviceBUtil.
callWebServicesGetProductsList(cookie, tids[0]);
nids = ProductCategoryIds.parseJSONResponseToGetTidsOfProducts(
jsonPorductsCategoryListResponse,
BConstant.PRODUCT_NODE_ID);
title = ProductCategoryIds.parseJSONResponseToGetTidsOfProducts(
jsonPorductsCategoryListResponse,
BConstant.PRODUCT_TITLE);
productImgPath = ProductCategoryIds.parseJSONResponseToGetTidsOfProducts(
jsonPorductsCategoryListResponse,
BConstant.PRODUCT_IMAGE);
productListImagePath = new HashMap<Integer, String>();
for(int i =0;i<productImgPath.length;i++){
productListImagePath.put(i, productImgPath[i]);
}
System.out.println(productListImagePath);
imgBitmapUrls = productInterfaceForProductList
.DownloadImages(productListImagePath);
proListAdapter = new DisplayProductListArrayAdapter(
getActivity(), title,
imgBitmapUrls);
listOfProducts.setAdapter(proListAdapter);
listOfProducts.setOnItemClickListener(this);
}
static ProductListFragment newInstance(Bundle bundle) {
ProductListFragment productListFragment = new ProductListFragment();
productListFragment.setArguments(bundle);
cookie = bundle.getString(BConstant.WEB_SERVICES_COOKIES);
tids = bundle.getStringArray(BConstant.TAXONOMY_TID);
return productListFragment;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
}
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.products_list_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=((Activity)context).getLayoutInflater();
View row = inflater.inflate(R.layout.products_list_single_layout, parent, false);
ImageView productCategoryImage = (ImageView) row
.findViewById(R.id.productImageId);
Bitmap bitmap = imgBitmapUrls.get(position);
// productCategoryImage.setFocusable(false);
TextView productCategoryName = (TextView) row
.findViewById(R.id.productName);
productCategoryImage.setImageBitmap(bitmap);
productCategoryName.setText(proCategoryNames[position]);
return row;
}
}
public void clickedProductCategoryIdByProductCategoryFragment(String tid){
jsonPorductsCategoryListResponse = WebserviceBUtil.
callWebServicesGetProductsList(cookie, tid);
}
}
最佳答案
您可以创建接口(interface),该接口(interface)将监听第一个 fragment 并执行操作并将操作传递给您的 Activity 。
在您的 Activity 中,您可以更新第二个 Fragment 中的数据。
public interface IFoo
{
public void foo();
}
在第一个 fragment 中
IFoo responder; //global variable
private ProductCategoryFragment(IFoo resp)
{
this.responder=resp;
}
static ProductCategoryFragment newInstance(Bundle bundle, IFoo resp) {
ProductCategoryFragment productCategoryFragment = new ProductCategoryFragment(resp);
productCategoryFragment.setArguments(bundle);
cookie = bundle.getString(BsharpConstant.WEB_SERVICES_COOKIES);
tids = bundle.getStringArray(BsharpConstant.TAXONOMY_TID);
publicPath = bundle.getString(BsharpConstant.PUBLIC_PATH);
listProCategory = bundle.getStringArray(BsharpConstant.PRODUCT_CATEGORY_NAMES);
return productCategoryFragment;
}
有些是 fragment
responder.foo();
在你的 Activity 中
public class ProductListActivity extends Activity implements IFoo
{
...
public void foo()
{
//pass data to second fragment
}
onCreate
{
...
ProductCategoryFragment.newInstance(bundle, this);
}
}
让你的 fragment 成为全局变量,以便随时访问它们
我希望它很清楚并且会有所帮助。如果不清楚,请随时提出其他问题:)
关于android - 两个 fragment 之间的 onItemClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20683593/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!