首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:监听器监听listview中的图片

Android:监听器监听listview中的图片
EN

Stack Overflow用户
提问于 2015-03-14 11:26:23
回答 1查看 496关注 0票数 0

我在主活动中使用asynctask,并从服务器数据中填充列表项。现在我做了另一个类'download‘,它从服务器上下载一个特定的文件。我的主要活动是:

代码语言:javascript
复制
public class MainActivity extends Activity {
TextView uid;

Button Btngetdata;
//URL to get JSON Array
private static String url = "myurl";
//JSON Node Names
private static final String TAG_POSTS = "allposts";
private static final String TAG_SINGLEPOST = "post";

JSONArray user = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Btngetdata = (Button)findViewById(R.id.getdata);
    Btngetdata.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new JSONParse().execute();
        }
    });




}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
    private ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();


        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Getting Data ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }
    @Override
    protected JSONObject doInBackground(String... args) {
        JSONParser jParser = new JSONParser();
        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        return json;
    }
    @Override
    protected void onPostExecute(JSONObject json) {
        pDialog.dismiss();
        try {
            // Getting JSON Array
            user = json.getJSONArray(TAG_POSTS);
            String[] allposts = new String[user.length()];
            for(int i = 0; i < user.length(); i++) {
                JSONObject c = user.getJSONObject(i);

                allposts[i]=c.getString(TAG_SINGLEPOST);
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                  MainActivity.this,
                       R.layout.singlepost,
                        R.id.singlepostid,
                        allposts
                );
                ListView list = (ListView) findViewById(R.id.allposts);
                list.setAdapter(adapter);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
}

我的下载类:

代码语言:javascript
复制
public class download extends Activity {

public static final int DIALOG_DOWNLOAD_PROGRESS = 0;

private ProgressDialog mProgressDialog;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   // startBtn = (Button)findViewById(R.id.downloadid);
    ImageView img = (ImageView) findViewById(R.id.downloadid);
    img.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {

             startDownload();
        }
    });

}

public void startDownload() {
    String url = "urlforfile";
    new DownloadFileAsync().execute(url);
}
@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS:
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Downloading file..");
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
    }
}

class DownloadFileAsync extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }

    @Override
    protected String doInBackground(String... aurl) {
        int count;

        try {

            URL url = new URL(aurl[0]);
            URLConnection conexion = url.openConnection();
            conexion.connect();

            int lenghtOfFile = conexion.getContentLength();
            Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);

            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream("/sdcard/fileonserver.pdf");

            byte data[] = new byte[1024];

            long total = 0;

            while ((count = input.read(data)) != -1) {
                total += count;
                publishProgress(""+(int)((total*100)/lenghtOfFile));
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {}
        return null;

    }
    protected void onProgressUpdate(String... progress) {
        Log.d("ANDRO_ASYNC",progress[0]);
        mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(String unused) {
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
}
}

现在我想为listview中的每个下载图标实现onclick listener。有人能帮上忙吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-14 12:33:13

您想要一个每次(或多或少)都相同的回调,用于listview项视图的子级吗?你可以采取几种方法。您已经在适配器中实现了getView(),对吗?让我们在那里设置回调。

代码语言:javascript
复制
public View getView (int position, View convertView, ViewGroup parent){
    ...
    converView.findViewbyId(R.id.ID_OF_YOUR_DOWNLOAD_ICON).setOnClickListener(new OnClickListener() {
        //new DownloadFileAsync().execute(url);?
    });
    return convertView;
}

我不知道你的NPE在哪里,如果你发布你的堆栈跟踪,我们也可以帮助你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29045102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档