是否有解决方案以不同的方法仅使用1个findViewById

时间:2018-11-22 05:49:21

标签: java android android-layout

我有2种不同的方法。

方法a将显示textview1。 方法b还将显示textview1。

在这两种方法中,我都需要包含findViewById(R.id.textview1)。因此需要在代码中放置两次findViewById。

4 个答案:

答案 0 :(得分:1)

///如果您使用的是Kotlin,请将此插件与应用模块Gradle中的kotlin库一起应用

apply plugin: 'kotlin-kapt'

kapt {
    generateStubs = true
}

//,那么您只需在XML布局中提供视图的名称即可,而不必初始化视图,例如..

// xml视图

<TextView
                        android:id="@+id/tv_location"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"

                        android:gravity="center_vertical"
                        android:paddingStart="8dp"
                        android:singleLine="true"

                        android:textSize="14sp" />

//现在在kotlin类中

tv_location.text = "Kolkata,India" 

//try this 

答案 1 :(得分:0)

使用butterknife库:

class Activity {
    @BindView(R.id.textview1)
    TextView view1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_home);
        ButterKnife.bind(this);
    }

您现在可以通过此活动中的任何方法访问view1

答案 2 :(得分:0)

您可以将textview声明为全局变量。 然后,您可以在该活动,类或片段的任何地方使用该变量。

public class Main2Activity extends AppCompatActivity {

   private TextView textView1;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main2);
      textView1 = findViewById(R.id.textview1);
   }
   private void method1(){
      textView1.setText("method 1");
   }
   private void method2(){
      textView1.setText("method 2");
   }
}

答案 3 :(得分:0)

ButterKnife由Square的Jake Wharton开发,本质上用于在处理视图时保存诸如findViewById(R.id.view)之类的重复代码行,从而使我们的代码看起来更简洁。

将此依赖项添加到您的build.gradle

compile 'com.jakewharton:butterknife:6.1.0'

将此内容写在onCreate()

ButterKnife.bind(this);

然后您会发现像这样的元素:

@Bind(R.id.txtview1)
Textview textview;