2014-02-05 2 views
0

У меня есть макет дисплея с двумя элементами, один из которых - это ImageView, а другой - TextView. Я использую этот макет, отображаю много вещей, но есть проблема. Проблема заключается в том, что я запускаю активность использует этот макет, эта деятельность заполняет его и убивает себя. Если я вызываю другое действие, это макет меняет изображение, но текст остается тем же. Я не хочу публиковать весь код, но если вам нужны ребята, я могу его опубликовать.Ошибка изменения текста текстового текста Android

setContentView(R.layout.info_display_tablet); 
    iv = (ImageView) findViewById(R.id.imageView1); 
    tx = (TextView) findViewById(R.id.textView1); 
    try { 
     result = MethodInfoGetter.methodRequest("CTVIslemleriGetir", "", ""); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    tx.setText(""); 
    iv.setImageResource(R.drawable.cevre_temizlik); 
    tx.setText(result.get(0).get(1).toString()); 

здесь предполагает мой первый вызов в ДАВАЙТЕ и кодом второго вызова является

public class BalikesirTarih extends Activity 
{ 
ArrayList<ArrayList> result = new ArrayList<ArrayList>(); 
ImageView iv; 
TextView tx; 
Bitmap bmp = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.info_display_tablet); 
    iv = (ImageView) findViewById(R.id.imageView1); 
    tx = (TextView) findViewById(R.id.textView1); 
    try { 
     result = MethodInfoGetter.methodRequest("BalikesirTarihiGetir", "", ""); 
     Log.i("Balikesir tarihi log denemesi",result.toString()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    new asTask().execute(); 
} 

private class asTask extends AsyncTask<Void , Void ,Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 

     URL url = null; 
     try { 
      url = new URL("http://balikesir.bel.tr/Balikesir_Tarihi/Resim_b_1.jpg"); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 

     try { 
      bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     iv.setImageBitmap(bmp); 
     tx.setText(""); 
     tx.setText(result.get(0).get(1).toString()); 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    finish(); 
} 
} 
+0

Вам не нужно публиковать весь ваш код, но без соответствующих бит мы не будем быть в состоянии помочь вам. –

+2

Текст будет отображаться по умолчанию в файле 'layout.xml' каждый раз, когда вы его загрузите, если вы не сохраните значение и не настроите его при раздувании' layout'. Я думаю, вам нужно предоставить * некоторый * код и/или лучшее объяснение, потому что это сбивает с толку. – codeMagic

+0

Вот мой код, который я вызываю в программе. –

ответ

0

Вы не можете использовать вид текста для передачи данных от одного вида деятельности на другой.

Один из способов сделать это с дополнительным. При открытии следующей деятельности вы можете сделать это:

Intent intent = /*create intent for opening the next activity*/; 
    intent.addExtra("textLabel", tx.getText()); 
    startActivity(intent); //or however you are opening next activity 

Тогда в следующей деятельности:

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.info_display_tablet); 
    iv = (ImageView) findViewById(R.id.imageView1); 
    tx = (TextView) findViewById(R.id.textView1); 

    String passedTextLabel = getIntent.getExtra("textLabel",""); 
    tx.setText(passedTextLabel); 
    .... 

} 

Однако, если ваша первая деятельность не является деятельностью, которая открывает вторую деятельность, вы, возможно, легче хранить данные в одноэлементном режиме. Так что в вашем первом занятии, когда вы получаете данные:

tx.setText(result.get(0).get(1).toString()); 
MySingleton.instance().setTextLabel(result.get(0).get(1).toString()); 

, а затем в следующей деятельности:

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.info_display_tablet); 
    iv = (ImageView) findViewById(R.id.imageView1); 
    tx = (TextView) findViewById(R.id.textView1); 

    tx.setText(MySingleton.instance().getTextLabel()); 
    .... 
+0

У меня разные данные, я не хочу ничего пропускать, я просто хочу каждый раз менять текст макета на новые данные. –

+0

Тогда все еще не ясно, чего вы хотите. Из кода, который вы опубликовали, что происходит неправильно, чего вы не ожидали? – Tenfour04

+0

У меня есть один макет и первый код, который я использую для отображения некоторых вещей, и активность убивает себя, когда я нажимаю кнопку «Назад», а позже я запускаю другое действие для отображения других данных, но я не могу удалить старые данные, поэтому это моя проблема. –

0

Из того, что Вы говорите, и то, что я понимаю, я думаю, вы hardcoding text на вашем макете xml.
Если вам нужно сохранить некоторые значения для вашего текстового поля, тогда проверьте API настроек, чтобы вы могли сохранить свое последнее значение и сбросить его после загрузки объекта в действие.
Если это не то, что вы хотите сделать, пожалуйста, будьте более конкретными (давая пример и показывая нам ваш макет xml)

Смежные вопросы