0

ユーザーが前のアクティビティでドラッグしたビューに基づいてアクティビティのビューを変更しようとしていますが、コードに問題があり、機能しません。

整数はpublicstaticint _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を作成しているだけです。既存のイメージビューを取得するか、新しく作成したイメージビューをコンテンツビューのビューグループに追加する必要があります。

編集:

アクティビティのコンテンツビューを設定する方法と、idでビューを検索することの意味について基本的な誤解があります。

  1. 各アクティビティにはメインコンテンツビューがあります。これをonCreateで設定するには、setContentViewを呼び出し、いずれかのレイアウト(R.layout.somelayout)のIDを渡します。渡す整数IDは、R.javaと呼ばれる自動生成されたクラス内にあるpublicstaticintです。そのクラスの中には、やなどの複数のネストされた静的クラスがpublic static final class layoutありpublic static final class idます。Android Asset Packaging Tool(aapt)は、アプリケーションリソースファイル(XMLで定義されたもの)を取得してコンパイルし、コードで参照できるようにします。したがって、たとえばDynresという名前の型や変数などはありません。そこにあるのは、R.id.Dynresとして参照できるpublicintだけです。しかし、繰り返しになりますが、そのintはxmlリソースのコンパイル済み表現と考えることができます。それが私の次のポイントにつながります。
  2. findViewByIdは、一部のViewGroup(viewgroupは、linearlayoutやrelativelayout(TextViewや子を含まない他のウィジェットとは対照的)など、他の子を保持できるビュー)内を検索して、渡したビューのID。たとえば、ビューへの参照がある場合は、someView.findViewById(R.id.someId)を呼び出して、そのビューの階層内の任意の場所でそのIDを持つビューを検索しようとします。そのビュー内にそのIDを持つそのようなビューがない場合、nullを返します。これで、アクティビティ内でfindViewByIdを呼び出すこともできます。これは、アクティビティのcontentViewとして設定したレイアウト内でその子ビューを検索するだけです。したがって、たとえば、setContentView(R.layout.mylayout)やmylayoutのようにアクティビティのコンテンツビューを設定した場合。xmlは、IDが「my_textview」のtextviewが内部にあるlinearlayoutであり、findViewById(R.id.my_textview)を実行できます。わかりました。これでビューが見つかりますが、実際にTextViewを使用できるようになりました。TextViewとして操作およびメソッドを呼び出すことができるJavaオブジェクトの場合と同様に、そのビューを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にレイアウトがある場合は、SeanJohnの(layout).addView(img);ような別の親を使用できます。それ以外の場合は、を使用してアクティビティに追加できますthis.AddContentView(img,new LayoutParams(...));

于 2012-11-07T03:26:21.220 に答える