java - 安卓- "A spinner does not support item click events. Calling this method will raise an exception."

标签 java android spinner

我有一个程序,屏幕上有大约 50 个按钮,它看起来相当难看。每个按钮都有一个异步下载,它只是从一个按钮复制到另一个按钮,并保存更改后的 URL 和文件名。我希望能够从使用按钮更改为使用一个微调器,希望只需一个异步下载任务,并且微调器作为选择下载 URL 和另存为的文件名的方式进行操作。这可能吗?在阅读了一些有关它的文档后,我感到很困惑。谢谢您的帮助。

更新:

使用下面建议的代码,我创建了这个:

public class SpinnerActivity extends Activity{


public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
private Button startBtn;
private ProgressDialog mProgressDialog;

Spinner spDownloadFrom;
private ArrayAdapter<CharSequence> spinnerArrayAdapter;
String url[]= {"www.abc.com/download/a.txt",
    "www.abc.com/download/a.txt",
    "www.abc.com/download/a.txt",
    "www.abc.com/download/a.txt",
    "www.abc.com/download/a.txt",
    "www.abc.com/download/a.txt",
    "www.abc.com/download/a.txt"
    };
String links[]= {"Server 1",
    "Server 2",
    "Server 3",
    "Server 4",
    "Server 5",
    "Server 6",
    "Server 7",
    };
public void onCreate(Bundle savedInstanceState )
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mProgressDialog = new ProgressDialog(SpinnerActivity.this);
mProgressDialog.setMessage("Please be patient, file downloading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);


spDownloadFrom=(Spinner)findViewById(R.id.Spinner01);

spinnerArrayAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, links);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spDownloadFrom.setAdapter(spinnerArrayAdapter);

spDownloadFrom.setOnItemSelectedListener(new SpinnerListener(spDownloadFrom));
}
public class SpinnerListener implements OnItemSelectedListener
{
Spinner sp;
public SpinnerListener(View v)
{
    sp=(Spinner)findViewById(v.getId());
}
@Override
public void onItemSelected(AdapterView<?> arg0, View v, int arg2,
        long arg3) {
    //Call to download class
        new DownloadFile().equals(url[arg2].toString());


}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub

}
}
class DownloadFile extends AsyncTask<String, Integer, String> { //put your download code

@Override
protected void onPreExecute() {
    super.onPreExecute();
    mProgressDialog.show();
}

@Override
protected void onProgressUpdate(Integer... progress) {
    super.onProgressUpdate(progress);
    mProgressDialog.setProgress(progress[0]);
}


@Override
protected String doInBackground(String... aurl) {
    try {

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

        connection.connect();
        int fileLength = connection.getContentLength();
        int tickSize = 2 * fileLength / 100;
        int nextProgress = tickSize;

        Log.d(

        "ANDRO_ASYNC", "Lenght of file: " + fileLength);

        InputStream input = new BufferedInputStream(url.openStream());

        String path = Environment.getExternalStorageDirectory()
                + "/Android/Data/"
                + getApplicationContext().getPackageName() + "/files";
        File file = new File(path);
        file.mkdirs();
        File outputFile = new File(file, "test1.pdf");

        OutputStream output = new FileOutputStream(outputFile);

        byte data[] = new byte[1024 * 1024];
        long total = 0;
        int count;
        while ((count = input.read(data)) != -1) {
            total += count;
            if (total >= nextProgress) {
                nextProgress = (int) ((total / tickSize + 1) * tickSize);
                this.publishProgress((int) (total * 100 / fileLength));
            }
            output.write(data, 0, count);
        }

        output.flush();
        output.close();
        input.close();
        mProgressDialog.dismiss();

    } catch (Exception e) {
    }
    return null;
}
protected void onProgressUpdate(String... progress) {
     Log.d("Downloading",progress[0]);

}

@Override
protected void onPostExecute(String unused) {

    File file = new File(Environment.getExternalStorageDirectory()
            + "/Android/Data/" + getApplicationContext().getPackageName()
            + "/files/test1.pdf");
    Intent testIntent = new Intent(Intent.ACTION_VIEW);
    testIntent.setType("application/pdf");
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    Uri uri = Uri.fromFile(file);
    intent.setDataAndType(uri, "application/pdf");
    try {
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(SpinnerActivity .this,
                "No Application Available to View PDF", Toast.LENGTH_LONG).show();
    }
}
}
 }

这对于我想要实现的目标是否正确?

最佳答案

public class Example extends Activity{

Spinner spDownloadFrom;
private ArrayAdapter<CharSequence> spinnerArrayAdapter;
String url[]= {"www.abc.com/download/a.txt",
        "www.abc.com/download/a.txt",
        "www.abc.com/download/a.txt",
        "www.abc.com/download/a.txt",
        "www.abc.com/download/a.txt",
        "www.abc.com/download/a.txt",
        "www.abc.com/download/a.txt"
        };
String links[]= {"Server 1",
        "Server 2",
        "Server 3",
        "Server 4",
        "Server 5",
        "Server 6",
        "Server 7",
        };
public void onCreate(Bundle savedInstanceState )
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    spDownloadFrom=(Spinner)findViewById(R.id.addQuotation_spinnerProduct);

    spinnerArrayAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, links);
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spDownloadFrom.setAdapter(spinnerArrayAdapter);

    spDownloadFrom.setOnItemSelectedListener(new SpinnerListener(spDownloadFrom));
}
public class SpinnerListener implements OnItemSelectedListener
{
    Spinner sp;
    public SpinnerListener(View v)
    {
        sp=(Spinner)findViewById(v.getId());
    }
    @Override
    public void onItemSelected(AdapterView<?> arg0, View v, int arg2,
            long arg3) {
        //Call to download class
            new DownloadFile().equals(url[arg2].toString());


    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }
}
class DownloadFile extends AsyncTask<String, String, String> { //put your download code

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected String doInBackground(String... aurl) {



        return null;

    }
    protected void onProgressUpdate(String... progress) {
         Log.d("Downloading",progress[0]);

    }

    @Override
    protected void onPostExecute(String unused) {
    }
}
 }

这是一个满足您要求的示例类。我没有运行它,如果有一些错误,很抱歉,但基本思想在这里。

关于java - 安卓- "A spinner does not support item click events. Calling this method will raise an exception.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458618/

相关文章:

java - 当更新项目时我不希望 src/test/java 出现在 Eclipse java 构建路径源类别中时,如何配置 maven pom.xml?

android - 如何通过命令行关闭 Android 模拟器

android - 如何在 ActionBarSherlock 导航微调器中包装文本内容

android - 如何防止 onItemSelected 在新实例化的 Spinner 上触发?

java - 从 Directories Only JFileChooser 返回的部分路径有时会重复

java - 如何用另一个表的计数更新一个表的字段? SQLite、Java、安卓

java - 从 Internet 检索图像

android - 使您的 Android 应用程序的应用程序内购买过程更难破解的最佳实践?

Android Espresso 测试 withHint 不起作用

android - 微调器删除项目