2013-02-13 2 views
0

Я новичок в программировании, и я не уверен, что правильно понимаю, как добавить TextView программно. Я нахожу много людей, которые это делают, но в контексте они используют this. Что обычно я понимаю, но в моем случае здесь это не сработает.Добавление TextView программно

Я извлекаю Objects через parse.com и пытаюсь установить String в .findInBackground(). Вот мой код:

private void Retrieve2() { 

     final ParseObject Fighters = new ParseObject("FightersDB"); 
     ParseQuery query = new ParseQuery("FightersDB"); 
     query.whereEqualTo("Name", "The First Guy"); 
     query.findInBackground(new FindCallback(){ 
      @Override 
      public void done(List<ParseObject> objects, ParseException e) { 

        if (e == null) {     
         Log.d("Status", "Retrieved suuccessfully"); 
         String name, record, age; 
        name = Fighters.getString("Name"); 
        age = Fighters.getString("Age"); 
        record = Fighters.getString("Record"); 
        set(name, record, age);  

        } else { 
         Log.d("Status", "Error: " + e.getMessage()); 
        } 

      } 

      private void set(String name, String record, String age) { 

       RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); 

       TextView tv = new TextView(this); //<---- RIGHT HERE IS MY PROBLEM 
       RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((int)LayoutParams.WRAP_CONTENT, (int)LayoutParams.WRAP_CONTENT); 
       params.leftMargin=0; 
       params.topMargin=80; 
       tv.setPadding(10, 0, 0, 0); 
       tv.setText("" + name + "" + record + "" + age); 
       tv.setTextSize((float) 20); 
       tv.setLayoutParams(params); 
       rl.addView(tv); 

      }   
     }); 

Где я заметил в коде, я получаю сообщение об ошибке, которое утверждает The constructor TextView(new FindCallback(){}) is undefined я не знаю, как добавить TextView без использования this в контексте. Может быть, я все-таки ошибаюсь в том, как добавить это.

Итак, мой вопрос в том, что я поставил в context, чтобы сделать эту работу? Я новичок в программировании, поэтому, пожалуйста, будьте осторожны в своих объяснениях.

+0

ли '' FindCallback' расширяет активность/View'? – Geros

+0

Нет, это только расширяет 'Object' –

+0

Вам необходимо передать ссылку' Activity' этому классу, чтобы вы могли динамически добавлять 'TextView'. – Geros

ответ

3
this 

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

TextView tv = new TextView(this); 

это относится к Activity.this, и большинство Vi требуют контекста. И Activity распространяется из контекста, поэтому вы можете просто передать в Activity как контекст.

Ваше решение:
В настоящее время вы не показали, что класс это в, если это класс Activity, просто использовать это, если это InnerClass класса активность, использовать ActivityClass.this, если это не является классом Activity, вы должны получить контекст в параметрах метода (или конструктора/поля);

Update Поскольку вы сказали, его внутренний класс класса активность, вы можете использовать ActivityClass.this проходить в контексте:

TextView(ActivityClass.this); 
+0

Этот класс находится в моем классе Activity. поэтому я просто использовал бы TextView tv = new TextView (ActivityClass.this); '? –

+0

Да, используйте ActivityClass.this, чтобы обратиться к вашему классу outter. – wtsang02

+0

Отлично, получилось. Теперь мне просто нужно выяснить, почему он отображает «null null null». Но спасибо за вашу помощь. –

2

Попробуйте использовать ActivityClass.this, например.

TextView tv = new TextView(ActivityClass.this); 
Смежные вопросы