【问题标题】:How to identify which child LinearLayout clicked?如何识别单击了哪个子 LinearLayout?
【发布时间】:2019-02-24 06:04:38
【问题描述】:
whilc(rs.next()){
data_big_layout = new LinearLayout(this);
data_big_params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
data_big_params.setMargins(0,15,0,0);
data_big_layout.setLayoutParams(data_big_params);
data_big_layout.setOrientation(LinearLayout.HORIZONTAL);
data_big_layout.setWeightSum(20);
data_big_layout.setBackgroundColor(Color.WHITE);
data_big_layout.setTag(rs.getInt(1));
data_big_layout.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           Toast.makeText(getBaseContext(),"ID: "+data_big_layout.getTag(), Toast.LENGTH_LONG).show();
           name.setText("Clicked ID: " + data_big_layout.getTag());
       }
});
detail_data_layout = new LinearLayout(this);
lparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT,8.0f);
detail_data_layout.setLayoutParams(lparams);
detail_data_layout.setOrientation(LinearLayout.VERTICAL);
detail_data_layout.setPadding(50,0,0,0);

lparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
name = new TextView(this);
name.setLayoutParams(lparams);
name.setText("ID(get from rs.next): " + rs.getString(1));
name.setTextSize(24);
name.setTypeface(Typeface.DEFAULT_BOLD);
detail_data_layout.addView(name);
scroll_view_child.addView(data_big_layout); //scroll_view_child is a LinearLayout
}

大家好,我有一个问题无法解决。上面的代码会生成两个带有onclick函数的LinearLayout。但是,onclick 功能无法识别我被点击的是哪一个。

我在第一个和第二个LinearLayout中设置的两个标签应该是“1”和“2”,但是当我点击它时,所有LinearLayout都会显示“2”。我怎么解决这个问题?谢谢!

我修改了一些代码进行测试,rs.next肯定可以得到ID“1”和“2”,但是当我点击LinearLayout时(无论我点击了哪个布局),只有第二个会改变文本视图。 此外,无论我点击了哪个 LinearLayout,getTag() 都只显示“2”。

ps:一些textview和imageview代码被跳过

点击前:

点击后(无论我点击哪个布局):

【问题讨论】:

  • 这段代码是做什么的? "rs.getInt(1)" 它总是得到相同的 int
  • 此代码是一个存储来自数据库的数据的结果集。 rs.getInt(1) 表示获取结果集的第一个值。

标签: java android android-layout


【解决方案1】:

不要依赖LinearLayout 变量名来获取标签值。相反,您需要依赖View inside click listener 方法:

data_big_layout.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           Toast.makeText(getBaseContext(),"ID: "+ v.getTag(), Toast.LENGTH_LONG).show();
           name.setText("Clicked ID: " + v.getTag());
       }
});

【讨论】:

  • @AlanLam:不客气!如果这解决了问题,请标记为已接受的答案。或者,如果您有答案,您可以创建一个答案,然后将其标记为已接受的答案。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 2012-05-23
  • 2018-05-15
相关资源
最近更新 更多