1

我想从弹出窗口调用一个活动,我可以使用方法 startActivity() 来完成,接下来我想将此活动的值传递给弹出窗口中的字段

我正在尝试使用 startActivityForResult() 传递值,但我无法覆盖 onActivityResult()

我该怎么做,有没有其他方法可以做到这一点?

4

3 回答 3

1

那么问题是什么?你想知道如何为弹出窗口编写一个类吗?那么下面的代码可能会有所帮助。以您想要的方式编辑它并为下一个活动编写intent。您还可以通过android 中的整个活动获取数据getintent和发送数据。putextra公共类 ShowPopUp 扩展 Activity {

PopupWindow popUp;
LinearLayout layout;
TextView tv;
LayoutParams params;
LinearLayout mainLayout;
Button but;
boolean click = true;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    popUp = new PopupWindow(this);
    layout = new LinearLayout(this);
    mainLayout = new LinearLayout(this);
    tv = new TextView(this);
    but = new Button(this);
    but.setText("Click Me");
    but.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            if (click) {
                popUp.showAtLocation(mainLayout, Gravity.BOTTOM, 10, 10);
                popUp.update(50, 50, 300, 80);
                click = false;
            } else {
                popUp.dismiss();
                click = true;
            }
        }

    });
    params = new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT);
    layout.setOrientation(LinearLayout.VERTICAL);
    tv.setText("Hi this is a sample text for popup window");
    layout.addView(tv, params);
    popUp.setContentView(layout);
    // popUp.showAtLocation(layout, Gravity.BOTTOM, 10, 10);
    mainLayout.addView(but, params);
    setContentView(mainLayout);
}

}

于 2013-09-04T05:56:36.800 回答
0

您应该创建具有有限宽度和高度的透明活动,而不是弹出对话框。这样它看起来像对话框然后您可以打开另一个活动并使用传递值intent.putExtra()

按照这种方式,您还可以使用startActivityForResult() and onActivityResult()

public class PopupWindowActivity extends Activity {

PopupWindow popwindow;
Button btnpopupopener,btnOpenActicivt;
TextView tv_result;
final static int POPRESULTcode=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_popup_window);

    btnpopupopener=(Button)findViewById(R.id.btnpopupopen);
    btnpopupopener.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            LayoutInflater inflator= (LayoutInflater)PopupWindowActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            LinearLayout vi=(LinearLayout)inflator.inflate(R.layout.layout_popup_content, null);
            btnOpenActicivt= (Button)vi.findViewById(R.id.btnOpenActivity);
            tv_result=(TextView)vi.findViewById(R.id.tv_result);


            popwindow = new PopupWindow(vi, LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            popwindow.setContentView(vi);

            btnOpenActicivt.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent in= new Intent(PopupWindowActivity.this, SampleResultActivity.class);
                    startActivityForResult(in, POPRESULTcode);

                }
            });

            popwindow.showAsDropDown(btnpopupopener);

        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    switch(resultCode){
    case POPRESULTcode:
            Log.i("Result"," Getting Message From Result Activity");

            tv_result.setText(data.getExtras().getString("resultstring"));
            popwindow.showAsDropDown(btnpopupopener);
        break;
    }

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.popup_window, menu);
    return true;
}


public class SampleResultActivity extends Activity {

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

    Intent in= new Intent(getApplicationContext(), PopupWindowActivity.class);
    in.putExtra("resultstring", "Sending Sample String as Data");
    setResult(1, in);
    finish();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.sample_result, menu);
    return true;
}

}

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

<Button
    android:id="@+id/btnpopupopen"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="24dp"
    android:text="Open Popup" />

弹出窗口布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/btnOpenActivity"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Go To next Activity Get Result back" />

<TextView
    android:id="@+id/tv_result"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="View Result Here"
    android:textAppearance="?android:attr/textAppearanceLarge" />

于 2013-09-04T06:02:12.443 回答
0

您可以使用 Bundle 将值传递给其他活动。

Intent intent = new Intent(this, SomeActivity.class);
intent.putExtra("someKey", 50);
startActivity(intent);

然后通过执行以下操作在您的“SomeActivity”类中接收它:

Bundle extras = getIntent().getExtras();
if(extras.containsKey("someKey")){
   int defaultValue = -1;
   Log.d("Magic!", "My bundled extra: " + extras.getInt("someKey", defaultValue)); 
}
于 2013-09-04T05:57:10.507 回答