0

我正在尝试根据用户在上一个活动中拖动的视图来更改活动的视图,但是我的代码中有问题并且它拒绝工作。

整数存储为公共静态 int _id,并且为每个视图设置整数,如下所示:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 50);
layoutParams.leftMargin = 250;
layoutParams.topMargin = 250;
layoutParams.bottomMargin = -250;
layoutParams.rightMargin = -250;
_view.setLayoutParams(layoutParams);
_view.setOnTouchListener(this);
_view.setId(1);

然后通过这段代码将整数发送到下一个活动。

       case MotionEvent.ACTION_UP:  
        _id = view.getId();
        Intent intent = new Intent(MainActivity.this, Exit_Activity.class);
        intent.putExtra("smiley", _id);
        startActivity(intent);

然后理论上应该在下一个活动中接收它并定义在屏幕顶部可见的视图。

public class Exit_Activity extends Activity {
ImageView _view;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_exit_);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    Intent Intent = getIntent();
    int intValue = Intent.getIntExtra("smiley", 0);

    ImageView img = new ImageView(this);
    img.setImageResource(R.drawable.smile);    
if (intValue == 1) {img.setImageResource(R.drawable.smile);}
else if (intValue == 2) {img.setImageResource(R.drawable.frown);}
 }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_exit_, menu);
    return true;
}

现在,无论拖动什么视图,它似乎都没有做任何事情。任何输入将不胜感激。

编辑:

对于额外的布朗尼积分,我正在尝试对文本做同样的事情,它看起来有点像这样:

    TextView textView = (TextView) findViewById(R.id.DynRes);
setContentView(R.id.DynRes);
if (intValue == 1) {DynRes.setText("Good to hear! have a nice day!");}
else
    if (intValue == 2) {DynRes.appendText("We're very sorry, we'll try harder next time!");}

}

我在 Eclipse 中收到一个错误,上面写着“DynRes 无法解决”,我并不完全清楚为什么。再次感谢。

4

3 回答 3

2

传递额外的数据看起来是正确的。打印你收到的价值,看看你得到了什么。并将您的图像添加到任何父母使用

parent.addView(img);
于 2012-11-07T03:09:36.460 回答
2

它什么都不做的原因是因为您没有抓取现有的 ImageView 并对其进行操作(例如,通过 findViewById())。相反,您只是在创建一个新的 ImageView。您需要获取现有的图像视图或将新创建的图像添加到您的内容视图的视图组中。

编辑:

您对如何设置 Activity 的内容视图以及通过 id 查找视图的含义有一个基本的误解。

  1. 您的每个活动都有一个主要内容视图。您可以通过调用 setContentView 并传入其中一个布局 (R.layout.somelayout) 的 id 在 onCreate 中进行设置。您传入的整数 id 只是位于名为 R.java 的自动生成类内部的公共静态 int。该类内部是多个嵌套的静态类,例如public static final class layoutpublic static final class id。Android 资产打包工具 (aapt) 获取您的应用程序资源文件(在 XML 中定义的东西)并编译它们,以便您可以在代码中引用它们。因此,例如,没有名称为 Dynres 的类型或变量等。只有一个公共 int,您可以将其引用为 R.id.Dynres。但是,同样,您可以将该 int 视为您的 xml 资源的编译表示。这让我想到了下一点。
  2. findViewById is a method that can search inside of some ViewGroup (viewgroup being some view that can hold other children, like a linearlayout or a relativelayout (as opposed to TextView and other widgets that do not contain children)) to find a child view with the id of the one you passed in. So, for example if you have reference to some View, you can call someView.findViewById(R.id.someId) which will try to find a view with that id anywhere in that view's hierarchy. If there is no such view with that id inside of that view, then it returns null. Now, you can also call findViewById inside of an Activity, which simply searches inside of the layout that you set as the contentView of your Activity for that child view. So, for example, if you set the contentview of your Activity like setContentView(R.layout.mylayout) and mylayout.xml was some linearlayout that had a textview inside of it with the id of 'my_textview' then you can do findViewById(R.id.my_textview). Ok, great this finds the view, but now, to actually have a TextView 对象就像在 Java 对象中一样,您可以将其作为 TextView 使用并调用方法,您需要将该视图转换为 TextView。因此,TextView tv = (TextView)findViewById(R.id.my_textview)只需使用 id 来查找该视图,然后将其转换为分配给变量“tv”的 TextView 类型的对象,因此现在 tv 是您需要用来调用方法等的对象。因此,您的代码需要beDynRes.setText("Good to hear! have a nice day!")
  3. 您不想将 contentview 设置为 textview。contentview 应该是在包含 textview 的 xml 布局中定义的某个 ViewGroup。
于 2012-11-07T03:21:20.763 回答
0

如果您在 Exit_Activity 中有一个布局,那么您可以使用(layout).addView(img);或像 Sean John 所说的另一个父级。否则,您可以使用将其添加到活动中this.AddContentView(img,new LayoutParams(...));

于 2012-11-07T03:26:21.220 回答