【问题标题】:Adding views programmatically. displays nothing以编程方式添加视图。什么都不显示
【发布时间】:2015-06-11 10:00:42
【问题描述】:

我正在以编程方式向我的表格行添加一个视图。一切正常,logcat 没有显示任何错误。奇怪的是,我的活动中没有显示任何内容。

下面是我正在使用的代码:

            try{
                int k=0;

                for(i=0;i<=Math.ceil(jArray.length()/2);i++){
                    Log.e("I...",""+i+" "+Math.ceil(jArray.length()/2));
                    tr_head = new TableRow(getApplicationContext());
                    tr_head.setId(10+i);
                    tr_head.setPadding(30, 30, 30, 5);
                    tr_head.setGravity(Gravity.LEFT|Gravity.CENTER_HORIZONTAL);
                    tr_head.setLayoutParams(new LayoutParams(
                                                             LayoutParams.MATCH_PARENT,
                                                             LayoutParams.WRAP_CONTENT));

                    for(j=0;j<2;j++)
                    {
                        if (k<jArray.length()){
                            jobj1 = jArray.getJSONObject(k);

                            LinearLayout parent = new LinearLayout(getApplicationContext());
                            parent.setLayoutParams(new LinearLayout.LayoutParams(dpToPx(150), dpToPx(150)));
                            parent.setOrientation(LinearLayout.VERTICAL);
                            parent.setGravity(Gravity.CENTER);
                            ImageView img = new ImageView(getApplicationContext());
                            img.setLayoutParams(new LinearLayout.LayoutParams(dpToPx(60),dpToPx(60)));
                            Picasso.with(getApplicationContext()).load(jobj1.getString("image")).resize(50,50).into(img);
                            parent.addView(img);

                            TextView txt = new TextView(getApplicationContext());
                            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                            txt.setLayoutParams(params);
                            txt.setText(jobj1.getString("name"));
                            parent.addView(txt);

                            tr_head.addView(parent);
                            parent.setOnClickListener(new OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    // TODO Auto-generated method stub
                                    try{
                                        String catid=jobj1.getString("category_id");
                                        Intent intent = new Intent(getApplicationContext(), DescribeComplain.class);
                                        intent.putExtra("category_id",catid);
                                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                        startActivity(intent);
                                    }
                                    catch(JSONException je){
                                        je.printStackTrace();
                                    }
                                }
                            });
                        }
                        else{
                            break;
                        }
                        k++;
                    }
                    t1.addView(tr_head, new TableLayout.LayoutParams(
                                                                     LayoutParams.WRAP_CONTENT,
                                                                     LayoutParams.WRAP_CONTENT));
                }
            }
            catch(JSONException je){
                je.printStackTrace();
            }
        }
    });
}
catch(JSONException e){
    Log.e("log_tag", "Error parsing data "+e.toString());
}

【问题讨论】:

  • t1 是否已添加到视图层次结构中?另外,在创建视图对象时不要使用应用程序上下文。
  • 你在 setContentView 中使用什么。您是否正在将您以编程方式生成的视图与底层视图结构链接起来?
  • t1 是我的主表格布局,其中包含动态生成的行,我将其设置为跟随 t1 = (TableLayout)findViewById(R.id.main_table);
  • 将 getApplicationContext() 更改为 context 或 ActivityName.this 它将正常运行...
  • 试过但没用。

标签: android android-linearlayout android-button


【解决方案1】:

在尝试了很多方法之后,我通过像这样设置linearLayout的参数来解决它

LinearLayout parent = new LinearLayout(SelectCaegory.this);
TableRow.LayoutParams Paramslinear = new  TableRow.LayoutParams(dpToPx(150),dpToPx(150));

【讨论】:

    【解决方案2】:

    你的问题在于这一行:

    LinearLayout parent = new LinearLayout(getApplicationContext());
    

    您正在创建一个新视图,但她没有附加到您的根视图。 尝试在布局文件中声明您的 LinearLayout,并使用 ID 进行查找

    LinearLayout parent = (LinearLayout) findViewById(R.id.my_parent_layout);
    

    【讨论】:

    • 它是动态创建的,所以我没有它的 id
    • 所以你需要将你的父级添加到你的根视图中。
    • 我的根视图是t1
    • 你应该尝试在你的 tr_head 视图上添加你的视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多