android - 单击共享按钮时如何从这些数组列表项中获取文本值

标签 android listview android-intent arraylist

我有一个 ListView 中显示的项目列表。我想要做的是获取数组列表值参数的字符串值,以便在我单击共享按钮时放入共享 Intent 。

这是我根据目前收到的意见和建议修改后的代码:

public class MainActivity extends AppCompatActivity {

    private String TAG = MainActivity.class.getSimpleName();
    private ListView lv;
    //public String term = null;
    public String url;
    public EditText editTextInput;

    ArrayList<HashMap<String, String>> itemList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editTextInput = (EditText) findViewById(R.id.editTextInput);

        itemList = new ArrayList<>();
        lv = (ListView) findViewById(R.id.list);

        //new GetSearchItems().execute();
    }

    public void onSearchClick(View v)
    {
//        String term = editTextInput.getText().toString();
//        url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=";
        if (lv== null) {
            String term = editTextInput.getText().toString();
            url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=";
            url = url.replaceAll(" ", "%20");
            new GetSearchItems().execute();
        }

        else {
            itemList.clear();
            String term = editTextInput.getText().toString();
            url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=";
            url = url.replaceAll(" ", "%20");
            new GetSearchItems().execute();
        }
    }

    public void page1(View v)
    {
        itemList.clear();
        String term = editTextInput.getText().toString();
        url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=";
        url = url.replaceAll(" ", "%20");
        new GetSearchItems().execute();
    }

    public void page2(View v)
    {
            itemList.clear();
            String term = editTextInput.getText().toString();
            url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=&start=11";
            url = url.replaceAll(" ", "%20");
            new GetSearchItems().execute();
    }

    public void page3(View v)
    {
        itemList.clear();
        String term = editTextInput.getText().toString();
        url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=&start=21";
        url = url.replaceAll(" ", "%20");
        new GetSearchItems().execute();
    }

    public void page4(View v)
    {
        itemList.clear();
        String term = editTextInput.getText().toString();
        url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=&start=31";
        url = url.replaceAll(" ", "%20");
        new GetSearchItems().execute();
    }

    public void page5(View v)
    {
        itemList.clear();
        String term = editTextInput.getText().toString();
        url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=&start=41";
        url = url.replaceAll(" ", "%20");
        new GetSearchItems().execute();
    }

    public void page6(View v)
    {
        itemList.clear();
        String term = editTextInput.getText().toString();
        url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=&start=51";
        url = url.replaceAll(" ", "%20");
        new GetSearchItems().execute();
    }

    public void page7(View v)
    {
        itemList.clear();
        String term = editTextInput.getText().toString();
        url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=&start=61";
        url = url.replaceAll(" ", "%20");
        new GetSearchItems().execute();
    }

//    public void onShareClick(View v) {
//
//        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
//        sharingIntent.setType("text/plain");
//        String shareSub = String.valueOf(v.findViewById(R.id.title));
//        String shareBody = String.valueOf(v.findViewById(R.id.link));
//
//        sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, shareSub);
//        sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
//        startActivity(Intent.createChooser(sharingIntent, "Share using"));
//    }

    public class GetSearchItems extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Toast.makeText(MainActivity.this,"SearchResults are downloading",Toast.LENGTH_LONG).show();
        }

        @Override
        public Void doInBackground(Void... arg0)
        {
            HttpHandler sh = new HttpHandler();
            // Making a request to url and getting response
            //String url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyA_Ee1WVjaHltF6B6wr2mkONXetYsy-ogU&cx=016799632979308504173:buxbhwd9nxm&q=" + term + "&gsc.sort=";
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);
            if (jsonStr != null)
            {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONArray items = jsonObj.getJSONArray("items");

                    // looping through All results
                    for (int i = 0; i < items.length(); i++) {
                        JSONObject c = items.getJSONObject(i);
                        String title = c.getString("title");
                        String link = c.getString("link");
                        String displayLink = c.getString("displayLink");
                        String formattedUrl = c.getString("formattedUrl");
                        String snippet = c.getString("snippet");

                        // tmp hash map for single result
                        HashMap<String, String> item = new HashMap<>();

                        // adding each child node to HashMap key => value
                        item.put("title", title);
                        item.put("link", link);
                        item.put("displayLink", displayLink);
                        item.put("formattedUrl", formattedUrl);
                        item.put("snippet", snippet);

                        // adding contact to result list
                        itemList.add(item);
                    }
                } catch (final JSONException e)

                {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }
                    });

                }

            } else

                {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG).show();
                    }
                });
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            // Adding menuItems to ListView
            ListAdapter adapter = new SimpleAdapter(MainActivity.this, itemList,
                    R.layout.list_item,
                    new String[] { "title","link", "snippet" }, new int[] {
                    R.id.title, R.id.link, R.id.snippet });

            lv.setAdapter(adapter);

            //setListAdapter(adapter);

            // selecting single ListView item
            //ListView lv = getListView();

            lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {

                //@Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id)
                {

                    // getting values from selected ListItem
                    String title = ((TextView) view.findViewById(R.id.title)).getText().toString();
                    String link = ((TextView) view.findViewById(R.id.link)).getText().toString();
                    String snippet = ((TextView) view.findViewById(R.id.snippet)).getText().toString();

                    Button shareButton = (Button) view.findViewById(R.id.sharebutton);
                    shareButton.setOnClickListener((View.OnClickListener) shareButton);
                    {
                        Intent shareIntent = new Intent();
                        shareIntent.setAction(Intent.ACTION_SEND);
                        shareIntent.setType("text/plain");
                        shareIntent.putExtra(Intent.EXTRA_SUBJECT, title);
                        shareIntent.putExtra(Intent.EXTRA_TEXT, link + " " + snippet );
                        startActivity(Intent.createChooser(shareIntent, "Share Via"));

                    }
                }
            });
        }
    }

}

单击共享按钮时,调试器控制台出现以下错误:

java.lang.IllegalStateException: Could not find method onItemClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'sharebutton'

根据收到的建议,我无法找出我做错了什么。我做错了什么,最好的解决方法是什么?

最佳答案

这就是您从数组列表项中获取文本值并将它们放入 Intent 中并在必要时在新 Activity 中进一步显示它们的方式。 (引用代码)

//-----------------------------------------------------------------------
// MainActivity.java
// This is how you will get the text values out of the array list items
// And create a share intent
//-----------------------------------------------------------------------

    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        // Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(MainActivity.this, itemList,
        R.layout.list_item,
        new String[] { "title","link", "snippet" }, new int[] {
        R.id.title, R.id.link, R.id.snippet });

        setListAdapter(adapter);

        // selecting single ListView item
        ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {

        // getting values from selected ListItem
        String title = ((TextView) view.findViewById(R.id.title)).getText().toString();
        String link = ((TextView) view.findViewById(R.id.link)).getText().toString();
        String snippet = ((TextView) view.findViewById(R.id.snippet)).getText().toString();

        // Starting Share intent
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_SUBJECT, title);
        shareIntent.putExtra(Intent.EXTRA_TEXT, link + " " + snippet );
        startActivity(Intent.createChooser(shareIntent, "Share Via"));
        }
        });
    }    

关于android - 单击共享按钮时如何从这些数组列表项中获取文本值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45381761/

相关文章:

c# - 插入的ListView项目的索引

.net - 像 ObjectListView 这样的免费控件?

android - 即使没有数据,ListView 类的备用背景颜色

android - 找不到处理 Intent 的 Activity,Android

android - Android上从相机 Intent 获取图像

java - 如何使用 putExtra 打开另一个应用程序并为其发送一些数据?

java - Android ViewGroup 崩溃 : Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference

android - 使用相机 Intent 拍摄照片并在 imageView 或 textView 中显示?

java - SQLite DatabaseHelper 类不创建数据库

android - 如何检查用户是否在 Google Play 上对您的应用进行了评分?