从弹出窗口调用的活动中返回一个值



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

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

我该怎么做,还有别的办法吗?

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

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);
}

}

您可以使用Bundles将值传递给其他Activities。

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)); 
}

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

按照这种方式,您还可以使用startActivityForResult()和CCD_ 6。

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" />

最新更新