2012-06-13 5 views
0

У меня есть класс, который расширяет Activity и анализирует XML-файл. Текст, который я хочу из XML-файла, передается в качестве аргументов в класс java. Проблема в том, что в классе java я хочу ссылаться на android TextViews из папки Layout ресурса, чтобы я мог установить текст в аргументы String, которые я передаю. Думаю, я могу расширить класс java из Activity или пройти в качестве аргумент текущей активности ... они единственные, чтобы ссылаться на файлы в res/layout?Ссылка на Android Views из класса Java

public class xmlClass extends Activity{ 
    //parse the xml  
    MyDataFile mdf = new MyDataFile(arg1, arg2, arg3, arg4);  
} 

public class MyDataFile{ 
    public MyDataFile(arg1, arg2, arg3, arg4) 
    { 

    }  
    ******* Here I want to set the Text in a TextView to arg1; 
} 

ответ

0

Вы можете использовать метод findViewById(R.id.myResId) найти свой вид после того, как вы назвали setContentView(R.layout.myLayout); методом.

Если вы хотите установить текст на TextView, вы можете использовать ((TextView) findViewById(R.id.myResId)).setText(R.string.myText); напрямую.

Если вы хотите получить доступ к своим представлениям из класса, который не является его собственным Context, вы можете передать контекст в параметрах метода, а затем позвонить context.findViewById(...).

Но это связано с тем, что рано или поздно произойдет Context-leaks. Лучшим способом решения вашей проблемы является наличие получателя для вашего текста и установка его из Activity или Fragment, на котором размещается представление.

0
TextView yourTextView = (TextView)findViewById(R.id.yourTextViewId); 
yourTextView.setText(yourText); 
0

На ваш макет XML, найти TextView и установить:

android:id = "lorem" 

Тогда на классе деятельности:

TextView txt = (TextView) findViewById(R.id.lorem); 

и передать TXT как-то к классу данных. (передается как аргумент).

Тогда:

txt.setText(arg1); 
1

Я вижу два варианта:

первый есть, сделать MyDataFile Вложенный класс от вашей деятельности, как это:

public class xmlClass extends Activity{ 

    //keep TextViews as member 
    protected TextView mTextView 

    public void onCreate(){ 
     ... 
     setContentView(...) 
     mTextView = (TextView)findViewById(R.id.your_text_id); 

     //parse your XML 
     MyDataFile mdf = new MyDataFile(arg1, arg2, arg3, arg4); 
    } 

    //make MyDataFile a nested class 
    public class MyDataFile{ 

     public MyDataFile(String arg1,String arg2, ...){ 
      mTextView.setText(arg1); 
     } 
    } 

Второе решение, чтобы дать TextViews как параметры, подобные этому Конструктор

public MyDataFile(String arg1, TextView textForArg1, ...){ 
     textForArg1.setText(arg1); 
    } 
Смежные вопросы