簡體   English   中英

將數據從“片段”列表視圖項傳遞到“活動”字符串變量onitemclicklistener

[英]Passing Data from Fragment listview item to Activity string variable onitemclicklistener

我試圖將ListView項目從片段傳遞到活動中的字符串變量“ url”,該意圖成功創建了活動,但是當我嘗試傳遞數據時卻在其中運行問題。 fragment類具有一個帶有json數據的listview,它顯示了picture,title和name的列表。 當用戶選擇一個項目時,它將帶他們到活動中。 我希望他們的選擇將名稱從列表視圖轉移到其他活動中的url變量。 “這樣的URL從改變://.....id= HTTPS ”到“ HTTPS://.....id= ” + 名字從片段。 多數民眾贊成將使recyclerview更改為新的url,單擊任何listview項目。

我的片段:

public class Accueil extends Fragment {

ArrayList<articles> arrayList;
ListView lv;
public static String URL1=null;
class ReadJSON extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... params) {
        return readURL(params[0]);
    }

    @Override
    protected void onPostExecute(String content) {
        JSONObject jsonObject = null;
        try {
            jsonObject = new JSONObject(content);
        } catch (JSONException e1) {
            e1.printStackTrace();
        }
        JSONArray jsonArray = null;
        try {
            jsonArray = jsonObject.getJSONArray("articles");
        } catch (JSONException e1) {
            e1.printStackTrace();
        }
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject articlesobject = null;
            try {
                articlesobject = jsonArray.getJSONObject(i);
            } catch (JSONException e1) {
                e1.printStackTrace();
            }
            try {
                arrayList.add(new articles(
                        articlesobject.getString("picture"),
                        articlesobject.getString("title"),
                        articlesobject.getString("name")
                ));
            } catch (JSONException e1) {
                e1.printStackTrace();
            }
            CustomListAdaper adaper = new CustomListAdaper(
                    getActivity().getApplicationContext(), 
R.layout.custom_list_layout, arrayList
            );
            lv.setAdapter(adaper);
        }

    }


    private String readURL(String theURL) {
        StringBuilder content = new StringBuilder();
        try {
            URL url = new URL(theURL);
            URLConnection urlConnection = url.openConnection();
            BufferedReader bufferedReader = new BufferedReader(new 
InputStreamReader(urlConnection.getInputStream()));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line + "\n");
            }
            bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content.toString();
    }
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
arrayList = new ArrayList<>();
View rootView = inflater.inflate(R.layout.accueil, container, false);
lv = (ListView) rootView.findViewById(R.id.ListView1);
getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
        new Accueil.ReadJSON().execute("http://wach.ma/mobile/home.php");
    }

});
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int 
position, long id) {

        String selectedFromList = 
(lv.getItemAtPosition(position).toString());

        Intent i = new Intent(getActivity(), Test.class);

        i.putExtra("name", selectedFromList);
         startActivity(i);
    }

});
return rootView;
}
}

我的活動:

public class Test extends AppCompatActivity {
public String URL_DATA="http://wach.ma/mobile/category.php?id=";

private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private List<ListItem> listItems;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    listItems = new ArrayList<>();
    Intent i = getIntent();
    String s1 = i.getStringExtra("name");
    URL_DATA=URL_DATA+s1;
    loadRecyclerViewData();
}
private void loadRecyclerViewData(){
    final ProgressDialog progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Chargement...");
    progressDialog.show();
    StringRequest stringRequest = new StringRequest(Request.Method.GET, 
URL_DATA, new Response.Listener<String>() {
        @Override
        public void onResponse(String s) {
            progressDialog.dismiss();
            try {
                JSONObject jsonObject = new JSONObject(s);
                JSONArray array = jsonObject.getJSONArray("articles");

                for(int i = 0; i<array.length();i++){
                    JSONObject o = array.getJSONObject(i);
                    ListItem item = new ListItem(
                            o.getString("picture"),
                            o.getString("name"),
                            o.getString("city"),
                            o.getString("add_time"),
                            o.getString("price")
                    );
                    listItems.add(item);
                }
                adapter = new Myadapter(listItems, getApplicationContext());
                recyclerView.setAdapter(adapter);
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    Toast.makeText(getApplicationContext(), 
volleyError.getMessage(), Toast.LENGTH_LONG).show();

                }
            });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}
}

預先謝謝你,我對我的英語不好對不起

我認為您的問題來自於此: String selectedFromList = (lv.getItemAtPosition(position).toString());

lv.getItemAtPosition(position)返回一個Object,它是listView Adapter的一項! 在此對象上調用toString()不會返回任何結果:)

OnClickListener具有一個View in參數,它是父視圖,在您的情況下是您單擊的Item視圖。 您可以在OnClickListener中檢索包含name字段的TextView,並獲取此TextView的字符串,如下所示:

@Override
public void onItemClick(AdapterView<?> parent, View view, int postion, long id) {
    String name = ((TextView) view.findViewById(R.id.myNameField)).getText().toString();
}

希望對您有所幫助:)

PS:下次也發布您的XML代碼;)

我將其修復,只需對此進行更改:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int 
position, long id) {

    String selectedFromList = 
(lv.getItemAtPosition(position).toString());

    Intent i = new Intent(getActivity(), Test.class);

    i.putExtra("name", selectedFromList);
     startActivity(i);
}

});
return rootView;

對此:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int 
position, long id) {

        String selectedFromList= 
String.valueOf(arrayList.get(position).getIdd());

        Intent i = new Intent(getActivity(), Test.class);

        i.putExtra("name", selectedFromList);
         startActivity(i);
    }

});
return rootView;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM