2017-10-12 2 views
0

작성한 코드 중 일부를 사용하여 프로그래밍 방식으로 많은 textview를 만들었습니다. 클릭 할 때 액션을 수행해야하므로이 텍스트 뷰를위한 효율적인 단일 리스너를 만들고 싶습니다. 어떤 textview가 탭되었는지 알고 프로그래밍 방식으로 리스너를 연결하려면 어떻게해야합니까?안드로이드에서 프로그래밍 방식으로 여러 textviews에 대한 단일 onclick 리스너를 만들었습니다.

추신 : XML 레이아웃 파일을 사용하여 솔루션을 게시하지 마십시오. 미리 감사드립니다.

optionCubesTextviews = new TextView[cubesLength]; 
    for(i=0;i<cubesLength;i++) { 
     optionCubesTextviews[i] = new TextView(this); 
     optionCubesTextviews[i].setId(View.generateViewId()); 
     optionCubesTextviews[i].setTextSize(baseFont); 
     final RelativeLayout.LayoutParams optionCubesTextviewsParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     optionCubesTextviewsParams.addRule(RelativeLayout.BELOW, solutionCubeTextviews[i].getId()); 
     if (i != 0) { 
      optionCubesTextviewsParams.addRule(RelativeLayout.RIGHT_OF, optionCubesTextviews[i - 1].getId()); 
     } 
     optionCubesTextviewsParams.setMargins(10, 10, 10, 10); 
     optionCubesTextviews[i].setPadding(20, 20, 20, 20); 
     optionCubesTextviews[i].setTypeface(Typeface.DEFAULT); 
     //String qTextColorColor = preferenceFile.getString("qTextColor", DefaultManager.qTextColor); 
     optionCubesTextviews[i].setTextColor(Color.WHITE); 
     optionCubesTextviews[i].setBackgroundColor(Color.parseColor(randomColorString)); 
     optionCubesTextviews[i].setText(Character.toString(shuffledAnswerAsOptions.charAt(i))); 
     optionCubesTextviews[i].setVisibility(View.VISIBLE); 

     //Adding to Layout in invisible state 
     rLayout.addView(optionCubesTextviews[i], optionCubesTextviewsParams); 
    } 
+0

onclicklistner를 구현 한 다음 optionCubesTextviews.setOnclicklistner (this)를 설정하십시오. 모든 텍스트 뷰에 사용하는 Onclick 메서드에 공통 코드를 넣습니다. –

+0

https://stackoverflow.com/questions/46108600/get-text-from-dynamically-created-edittext-on-click-of-a-button 여기를 참조하십시오 –

답변

2

다른 속성과 마찬가지로 리스너를 만들고보기에 지정하면됩니다.

OnClickListener l = new OnClickListener(){ 
    public void onClick(View v){ 
     // TODO whatever... 
    } 
} 

for(i=0 ; i < optionCubesTextviews.length; i++) { 
    optionCubesTextviews[i].setTag(i); 
    optionCubesTextviews[i].setOnClickListener(l); 
} 
+0

어떤 텍스트 뷰가 탭되었는지 어떻게 알 수 있습니까? –

+1

optionCubesTextviews [i] .setTag (i);와 같이 TextView에 태그로 위치를 설정합니다. –

+0

다른 일을하고 싶다면 다른 리스너를 사용하십시오. – alex

0

확인이 예는 내가 만들어 내가 당신에게 당신이 클릭하는보기를 확인할 수 있습니다 이런 식으로 :)

도움이되기를 바랍니다.

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // THIS IS MY MAIN LAYOUT 
    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main_layout); 

    for (int i = 0; i < 3; i++) { 
     TextView textView = new TextView(this); 
     textView.setTag(String.valueOf(i)); 
     textView.setOnClickListener(this); 
     textView.setText("TEXT VIEW " + i); 
     linearLayout.addView(textView); 
    } 
} 

@Override 
public void onClick(View view) { 
    switch (view.getTag().toString()) { 
     case "0": 
      Toast.makeText(this, "TEXT VIEW 1", Toast.LENGTH_LONG).show(); 
      break; 
     case "1": 
      Toast.makeText(this, "TEXT VIEW 2", Toast.LENGTH_LONG).show(); 
      break; 
     case "2": 
      Toast.makeText(this, "TEXT VIEW 3", Toast.LENGTH_LONG).show(); 
      break; 
     default: 
      Toast.makeText(this, "Default", Toast.LENGTH_LONG).show(); 
    } 
}} 
관련 문제