java - 动态加载数据到新 View

标签 java android android-fragments

首先,我将数据动态加载到 PMenu.java 中的网格中,然后每个项目都有“查看更多”按钮。一旦我按下我想要在项目描述 View 中加载图像、名称及其数量。

我使用自定义网格将数据加载到 PMenu.java 中的网格,并且我在自定义网格中放置了一个按钮,以便它将导航到 viewmore.java。

我想知道按下按钮后如何将数据加载到 viewmore.java 文件

PMenu.java fragment

GridView grid;

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

        new PMenuAsyncTask(getActivity(), this).execute();
        grid = (GridView) view.findViewById(R.id.grid);
        return view;
}

@Override
    public void onTaskCompleted(JSONArray responseJson) {

        try {
            List<String> descriptions = new ArrayList<String>();
            List<String> imageUrls = new ArrayList<String>();

            for (int i = 0; i < responseJson.length(); ++i) {
                JSONObject object = responseJson.getJSONObject(i);

                if ((object.getString("MainCategoryID")).equals("1")
                        && (object.getString("SubCategoryID")).equals("1")) {
                    Log.i("ImageURL ", object.getString("ImageURL"));
                    imageUrls.add(object.getString("ImageURL"));
                    Log.i("Description ", object.getString("Description"));
                    descriptions.add(object.getString("Description"));
                }

            }

            CustomGrid adapter = new CustomGrid(getActivity(), descriptions,
                    imageUrls);
            grid.setAdapter(adapter);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

自定义网格类

public class CustomGrid extends BaseAdapter {
    private Context context;
    private final List<String> descriptions;
    private final List<String> imageUrls;

    public CustomGrid(Context c, List<String> descriptions, List<String> imageUrls) {
        this.context = c;
        this.descriptions = descriptions;
        this.imageUrls = imageUrls;
    }

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

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

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(
                    R.layout.fragment_pizza, parent, false);
            holder.ivImage = (ImageView) convertView
                    .findViewById(R.id.grid_image);
            holder.tvHeader = (TextView) convertView
                    .findViewById(R.id.grid_text);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.tvHeader.setText(descriptions.get(position));
        Picasso.with(this.context).load(imageUrls.get(position)).into(holder.ivImage);

        Button backButton = (Button) convertView.findViewById(R.id.button1);
        backButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent next = new Intent(context, viewmore.class);
                context.startActivity(next);
            next.putExtra("description", descriptions.get(position));
            next.putExtra("imageUrl", imageUrls.get(position));
            context.startActivity(next);
            }
        });


        return convertView;
    }

    private class ViewHolder {
        private TextView tvHeader;
        private ImageView ivImage;
    }
}

viewmore.java

public class viewmore extends Activity {

    private Context context;
    private final List<String> descriptions;
    private final List<String> imageUrls;

    public viewmore(Context c, List<String> descriptions, List<String> imageUrls) {
        this.context = c;
        this.descriptions = descriptions;
        this.imageUrls = imageUrls;
    }
    private ActionBar actionBar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_viewmore);

        String description = getIntent().getStringExtra("description");
        String imageUrl = getIntent().getStringExtra("imageUrl");

        actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setDisplayUseLogoEnabled(false);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_main_actions, menu);

        // Associate searchable configuration with the SearchView

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Take appropriate action for each action item click
        switch (item.getItemId()) {
        case R.id.action_cart:
            return true;
        case R.id.action_search:
            // search action
            return true;

        default:
            return super.onOptionsItemSelected(item);
        }
    }

     @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = LayoutInflater.from(context).inflate(
                        R.layout.activity_viewmore, parent, false);
                holder.ivImage = (ImageView) convertView
                        .findViewById(R.id.grid_image);
                holder.tvHeader = (TextView) convertView
                        .findViewById(R.id.grid_text);
                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.tvHeader.setText(descriptions.get(position));
            Picasso.with(this.context).load(imageUrls.get(position)).into(holder.ivImage);

            return convertView;
        }

        private class ViewHolder {
            private TextView tvHeader;
            private ImageView ivImage;
        }



}

最佳答案

您可以在启动 viewmore Activity 之前使用 intent.putExtra("key", value) 方法。

然后在viewmore Activity中,您可以通过getIntent().get*Extra("key")方法获取这些数据。

喜欢:

Intent next = new Intent(context, viewmore.class);
next.putExtra("description", descriptions.get(position));
next.putExtra("imageUrl", imageUrls.get(position));
context.startActivity(next);

然后(在 viewmore Activity 中):

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.activity_viewmore);

    String description = getIntent().getStringExtra("description");
    String imageUrl = getIntent().getStringExtra("imageUrl");

    // Get the TextView using its ID defined in the layout activity_viewmore.xml
    TextView tv = (TextView) findViewById(R.id.my_text_view);
    tv.setText(description);

    ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
    Picasso.with(this).load(imageUrl).into(imageView);
}

关于java - 动态加载数据到新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28428669/

相关文章:

java - Android - 启动两个 Activity

java - Activity 中的重叠 fragment

java - 两个 3D vector 之间的角度

java - 从另一个类访问 JFrame

java - 尝试建立本地连接时出错

java - 在某些 Android 案例中,早期初始化会出错吗?

android - fragment 类中的谷歌地图 onClick 事件

java - Java 断言调用的开销

java - 尝试计算 ArrayList 中的平均值

android - 在 Android 中支持使用 OpenType 字体的复杂文本布局