【问题标题】:How can I convert ListView to GridView?如何将 ListView 转换为 GridView?
【发布时间】:2014-05-27 06:48:59
【问题描述】:

我创建了一个应用程序,它在 ListView 中显示来自 Internet 的一些图片的listview。我想在GridView 中显示它。我尝试使用基本适配器代替列表适配器!但这不起作用,因为它不能接受 arg(arg 在代码中)

谁能帮我在gridview 中显示这些图片?

这是我的代码。

MainPage.java

public class MainPage extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("");

        setContentView(R.   layout.    contacts_list);

        final List<Model> list = new ArrayList<Model>();

        /** This block is for getting the <span id="IL_AD9" class="IL_AD">image url</span> to <span id="IL_AD2" class="IL_AD">download from</span> the server **/
        final GetDataFromDB getvalues = new GetDataFromDB();

        final ProgressDialog dialog = ProgressDialog.show(MainPage.this,
                "", "Gettting values from DB", true);
        final CountDownLatch latch = new CountDownLatch(1);
        new    Thread   (new Runnable() {
            public void run() {
                String response = getvalues.getImageURLAndDesciptionFromDB();
                System.out.println("Response : " + response);

                dismissDialog(dialog);
                if (!response.equalsIgnoreCase("")) {
                    if (!response.equalsIgnoreCase("error")) {
                        dismissDialog(dialog);

                        // Got the response, now split it to get the image Urls and description
                        String all[] = response.split("##"); 
                        for(int k = 0; k < all.length; k++){
                            String urls_and_desc[] = all[k].split(","); //  urls_and_desc[0] contains image url and [1] -> description.
                            list.add(get(urls_and_desc[1],urls_and_desc[0]));
                        }
                    }

                } else {
                    dismissDialog(dialog);
                }
                latch.countDown();
            }
        }).start();
        /*************************** GOT data from Server ********************************************/
 try {
    latch.await();
} catch (InterruptedException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
        ArrayAdapter<Model> adapter = new MyCustomArrayAdapter(this, list);
        setListAdapter(adapter);

        ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener()
        {
            @Override 
            public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
            { 
                 Intent intent = new Intent(MainPage.this, ViewImage.class);
                     Model model = list.get(position);
                     String myURL = model.getURL();

                     intent.putExtra("image", myURL);

                    startActivity(intent);}
        });
                }


    public void dismissDialog(final ProgressDialog dialog){
        runOnUiThread(new Runnable() {
            public void run() {
                dialog.dismiss();
            }
        });
    }
    private Model get(String s, String url) {
        return new Model(s, url);
    }
    @Override
    public void onBackPressed() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                this);

            // set title
            alertDialogBuilder.setTitle("Exit!");

            // set dialog message
            alertDialogBuilder
                .setMessage("Are you sure you want to leave?")
                .setCancelable(false)
                .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int id) {
                        // if this button is clicked, close
                        // current activity
                        MainPage.this.finish();
                    }
                  })
                .setNegativeButton("No",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int id) {
                        // if this button is clicked, just close
                        // the dialog box and do nothing
                        dialog.cancel();
                    }
                });

                // create alert dialog
                AlertDialog alertDialog = alertDialogBuilder.create();

                // show it
                alertDialog.show();
    }
        // your code.

}

MyCustomArrayAdapter.java

public class MyCustomArrayAdapter extends ArrayAdapter<Model> {

    private final Activity context;
    private final List<Model> list;

    public MyCustomArrayAdapter(Activity context, List<Model> list) {
        super(context, R.layout.list_layout_relative, list);
        this.context = context;
        this.list = list;
    }

    static class ViewHolder {
        protected TextView text;
        protected ImageView image;
        protected ProgressBar pb;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.list_layout_relative, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) view.findViewById(R.id.label);
            viewHolder.text.setTextColor(Color.BLACK);
            viewHolder.image = (ImageView) view.findViewById(R.id.image);
            viewHolder.image.setVisibility(View.GONE);
            viewHolder.pb = (ProgressBar) view.findViewById(R.id.progressBar1);
            view.setTag(viewHolder);
        } else {
            view = convertView;
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).getName());
        holder.image.setTag(list.get(position).getURL());
        holder.image.setId(position);
        PbAndImage pb_and_image = new PbAndImage();
        pb_and_image.setImg(holder.image);
        pb_and_image.setPb(holder.pb);
        new DownloadImageTask().execute(pb_and_image);
        return view;
    }
}

模型.java

public class Model {

    private String name;
    private String url;

    public Model(String name, String url) {
        this.name = name;
        this.url = url;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getURL() {
        return url;
    }

    public void setURL(String url) {
        this.url = url;
    }
}

我也想问点别的。有点离题..我正在从 url 下载图像并在 gridview 中显示。但它会下载需要大量数据的巨大图像。无论如何我可以下载该图像的缩略图以减少数据使用量吗?

【问题讨论】:

  • 您应该使用GridView 而不是ListView
  • 我试过了,但是自定义的 listadapter 不适用于 xml 文件中的 gridview
  • 我不明白,为什么你们选民给了他投票Down 你能解释一下为什么吗?他问得很简单,但他只是给了我们很多信息和很多代码,这就是为什么?他给了我们很多,因为他不知道他的坏在哪里
  • 大声笑没有那样的!我是新来的。但他给出的解决方案解决了我的问题!这就是为什么我应该感谢他!就这样。我还有一个问题!你可以在他的回答帖子上看到吗?请看看你能不能帮忙!

标签: android list gridview android-listview


【解决方案1】:

相同的代码,但不是扩展 listActivity 而是扩展正常活动并使用 GridView 定义 xml,id 为 foo 或任何你想要的。

GridView foo = (GridView) findViewById(R.id.foo);
ArrayAdapter<Model> adapter = new MyCustomArrayAdapter(this, list);
foo.setAdapter(adapter); 

【讨论】:

  • 表示 GridView 类型的 setListAdapter 方法未定义
  • 哦对不起我的错而不是 setListAdapter "setAdapter" 无论如何你欢迎呵呵
  • 我也想问点别的。有点离题..我正在从 url 下载图像并显示在 gridview 中。但它会下载需要大量数据的巨大图像。无论如何我可以下载缩略图以减少数据使用量?
  • 你做了很多工作似乎比你大,但我认为这是快速学习的好方法,这是问题而不是评论!但这是我的答案,如果您从服务器下载它们,则从您下载的任何内容中下载小图像版本在您的服务器中创建小版本图像,然后将它们获取到您的 android 应用程序
  • 我正在从不是我的外部服务器下载它们!这些 url 将用于在下一个活动中下载高质量的图像,所以我不能提供小图像的链接!还有其他选择吗?
猜你喜欢
  • 2020-04-28
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
相关资源
最近更新 更多