перемещать данные onItemClickListener in ListView, загруженный JSON, чтобы показывать их в другом activity

Я нуждаюсь в том, чтобы проконтролировать пульсацию на персонализированном Listview для того, чтобы он реализовал операцию завися тот, который нажимается. Уже у меня есть OnItemClickListener.

Но, поскольку я могу перемещать данные, содержавшие в Статье к другой Activity

Я оставляю им главный код

public class Noticias extends AppCompatActivity {

    ArrayList<Product> arrayList;
    ListView lv;
    ProgressDialog pdialog = null;
    Context context = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_noticias);
        android:setTitle("Noticias");

        arrayList = new ArrayList<>();
        lv = (ListView) findViewById(R.id.listView);
        context = this;


        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                pdialog = ProgressDialog.show(context, "", "Buscando Noticias...", true);
                new ReadJSON().execute("http://xxxxxxx/xxxxx/xxxxxx.php");
            }
        });

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                Toast.makeText(getApplicationContext(), "Click en la posición "  + position, Toast.LENGTH_SHORT).show();
            }
        });


    }

    class ReadJSON extends AsyncTask<String, Integer, String> {
        @Override
        protected String doInBackground(String... params) {
            return readURL(params[0]);
        }
        @Override
        protected void onPostExecute(String content) {
            pdialog.dismiss();
            try {
                JSONArray jsonarray = new JSONArray(content);
                for(int i =0;i<jsonarray.length(); i++){
                    JSONObject productObject = jsonarray.getJSONObject(i);
                    arrayList.add(new Product(
                            productObject.getString("nombre"),
                            productObject.getString("contenido"),
                            productObject.getString("extra1")

                    ));
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            CustomListAdapter adapter = new CustomListAdapter(
                    getApplicationContext(), R.layout.custom_list_layout, arrayList
            );
            lv.setAdapter(adapter);
        }
    }


    private static String readURL(String theUrl) {
        StringBuilder content = new StringBuilder();
        try {
            // create a url object
            URL url = new URL(theUrl);
            // create a urlconnection object
            URLConnection urlConnection = url.openConnection();
            // wrap the urlconnection in a bufferedreader
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            String line;
            // read from the urlconnection via the bufferedreader
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line + "\n");
            }
            bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content.toString();
    }
}

Я провожу несколько дней ища и единственная встреча информация с Arrays, созданными локально

Это код новой активности, где я получаю данные о Статье

public class Noticia extends AppCompatActivity {
    TextView tvname,tvcontenido;
    ImageView imgview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_noticia);

        Intent intent = getIntent();
        String nombre = intent.getStringExtra("nombre");
        String contenido = intent.getStringExtra("contenido");
        String extra1 = intent.getStringExtra("extra1");

        tvname = (TextView)findViewById(R.id.tvname);
        tvcontenido = (TextView)findViewById(R.id.tvcontenido);
        imgview = (ImageView)findViewById(R.id.imgview);

        tvname.setText(nombre);
        tvcontenido.setText(contenido);
        imgview.setImageURI(Uri.parse(extra1));
    }
}

Но только он показывает мне поля с текстом... Изображение не показывает ее

3
задан 03.03.2017, 01:17
3 ответа

Чтобы посылать параметры в новую активность, сначала ты будешь должен получать объект ArrayList, так как onItemClick он только возвращает нам положение, и в конце концов посылать информацию в Intent.

Я оставляю тебе пример, сделанный для кода, который ты показал:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
        Product selectedProduct = arrayList.get(position);

        Intent intent = new Intent(getApplicationContext(), NuevaActivity.class);
        intent.putExtra("nombre", selectedProduct.getName());
        intent.putExtra("contenido", selectedProduct.getContent());
        intent.putExtra("extra1", selectedProduct.getExtra());
        startActivity(intent);
    }
});

Имей в виду, что функции getName (), getContent (), getExtra () должны существовать в классе Продукт и возвращать соответствующий string.

Как только были посланы данные в Intent, ты будешь должен получать их в NuevaActivity этой формы:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.nueva_activity);

    Intent intent = getIntent();
    String nombre = intent.getStringExtra("nombre");
    String contenido = intent.getStringExtra("contenido");
    String extra = intent.getStringExtra("extra1");

    ... Resto de codigo de tu actividad, como los setText correpondientes etc...
}
2
ответ дан 24.11.2019, 12:22
  • 1
    Уже ему удайтесь напечатать поле назовите и сдержанное поле. Но изображение не появляется. Я комментирую тебе, что в дополнительном String = intent.getStringExtra (" extra"); идет Изображение – Sharly Infinitywars 26.11.2016, 19:37
  • 2
    я присоединил тебе код новой активности – Sharly Infinitywars 26.11.2016, 19:42
  • 3
    @Sharly Infinitywars я confundí в моем сообщении это дополнительный String = intent.getStringExtra (" extra1"); вместо дополнительного String = intent.getStringExtra (" extra"); уже я это исправил в моем ответе – Mitsuha Kitsune 26.11.2016, 19:51
  • 4
    @SharlyInfinitywars, чтобы загружать изображение с унифицированного указателя ресурса в ImageView, я рекомендую тебе использовать librerí в как Glide например – Mitsuha Kitsune 26.11.2016, 19:59
  • 5
    я использую книжный магазин picasso... – Sharly Infinitywars 26.11.2016, 20:15

Ты был бы должен использовать один Intent чтобы перемещать информацию в новую Активность.

Intent intent = new Intent(this, tuNuevaActivdad.class);

И распределять ему информацию, которую ты хочешь переместить с методом putExtra:

intent.putExtra("loquequieras", "tuValor");

В конце концов, бросать Intent:

startActivity(intent);

Внутри тебя listView он остался бы:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            Intent intent = new Intent(this, tuNuevaActivdad.class);
            intent.putExtra("loquequieras", "tuValor");
            startActivity(intent);
        }
    });

И после чтобы возвращать данные с твоей Активности tuNuevaActividad ты был бы должен подбирать intent посредством метода getIntent и информация посредством метода getStringExtra так как в этом случае мы переместили один String.

Intent intent = getIntent();
String tuValor = intent.getStringExtra("loquequieras"); //Recuperas el String "tuValor"

Очень важно:

  • Значительный string, в этом случае, loquequieras должен будь быть равен так во время распределения данных как чтобы возвращать их. Ты можешь помещать его String identificativo, который ты захотел.

  • Он не является обязательным, что как второй параметр ты переместил его один String. Ты можешь происходить с ним int, Char, Serializable, и т.д.... Ты можешь видеть все типы информации, которую ты можешь перемещать его здесь. Также ты должен иметь в виду, что, чтобы возвращать данные, также изменится метод в getIntExtra, getCharExtra, getSerializableExtra, и т.д. согласно типу информации, которую ты переместил бы его.

0
ответ дан 24.11.2019, 12:22

То, что ты желаешь, состоит в том, чтобы посылать переменные между Activities, это осуществляется посредством Intent:

Intent intent = new Intent(this, SegundaActivity.class);
intent.putExtra("VARIABLE1", variable);
intent.putExtra("VARIABLE2", otravariable);
startActivity(intent);

В Activity, которая получает эту стоимость, ты можешь получать их посредством Bundle :

 Bundle b = getIntent().getExtras();
 String variable_recibida1 = b.getString("VARIABLE1");
 String variable_rcibida2 = b.getString("VARIABLE2");

, Чтобы выполнять intent с твоего Activity, pro я происхожу одного botГіn,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Envía datos!" />

</LinearLayout>

просто добавляет listener в botГіn для того, чтобы realize intent:

Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {

    Intent intent = new Intent(this, SegundaActivity.class);
    intent.putExtra("VARIABLE1", variable);
    intent.putExtra("VARIABLE2", otravariable);
    startActivity(intent);

    }

});
0
ответ дан 24.11.2019, 12:22