0

我是安卓的自学者。

我有两个屏幕。第一个屏幕包含一个编辑文本和一个按钮,编辑文本是从用户那里获取输入,按钮是调用第二个屏幕上的 tabhost 的活动。

在运行时,从用户那里获得输入后,它应该向第二个屏幕上的选项卡主机的任何一个选项卡显示适当的值(根据用户的输入) 。

但这里我的问题是,它在单独的屏幕上显示答案,而不是在 tabhost 格式上。

注意:在下面的代码中,我猜只有问题在于使用共享首选项来存储数据并将数据显示到 tabhost。请任何人帮助我吗?

请在下面找到代码

Demo_tabActivity.java

  public class Demo_tabActivity extends Activity 
     {

private static String NAMESPACE = "http://tempuri.org/";
   private static String METHOD_NAME = "FahrenheitToCelsius";
   private static String SOAP_ACTION = "http://tempuri.org/FahrenheitToCelsius";
   private static String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";

   Button btnFar;
   EditText txtFar,txtshow;


   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       txtFar = (EditText)findViewById(R.id.editText_in);

       btnFar = (Button)findViewById(R.id.button1);
       btnFar.setOnClickListener(new View.OnClickListener()
       {
       public void onClick(View v)
       {
           String b;

         //Initialize soap request + add parameters
         SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);       

         //Use this to add parameters
         request.addProperty("Fahrenheit",txtFar.getText().toString());

         //Declare the version of the SOAP request
         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

         envelope.setOutputSoapObject(request);
         envelope.dotNet = true;

         try 
         {   
             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

             //this is the actual part that will call the webservice
             androidHttpTransport.call(SOAP_ACTION, envelope);

             // Get the SoapResult from the envelope body.

             SoapPrimitive result = (SoapPrimitive)envelope.getResponse();

             SharedPreferences sharedPreferences;
              sharedPreferences=PreferenceManager.getDefaultSharedPreferences(Demo_tabActivity.this);
             Editor editor = sharedPreferences.edit();
             editor.putString("your", "b");
             editor.commit();

             if(result != null)
             {
                 b=result.toString();
                 Intent i = new Intent(getApplicationContext(),Tab_1.class);
                 i.putExtra("goto", b.toString());
                 startActivity(i);
             }
             else
             {
                 Toast.makeText(getApplicationContext(), "oops!..empty",Toast.LENGTH_SHORT).show();
             }

           }
         catch (Exception e)
         {
           e.printStackTrace();
           }
         }
       });   

   }
 }

Tab_1.java

   public class Tab_1 extends Activity 
    {
EditText tv;
String result;


     /** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab1);

SharedPreferences sharedPreferences;
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(Tab_1.this);
String answer= sharedPreferences.getString("your","");

Bundle extras = getIntent().getExtras();

if(extras !=null)
{
    result = extras.getString("goto");

}
tv=(EditText)findViewById(R.id.editText_output);
tv.setText(result);
}
  }

感谢您宝贵的时间!!

4

1 回答 1

1

好的。让我先简要解释一下。

当您调用 startActivity() 时,它仅表示您正在尝试调用 Activity 类。但这并不意味着您将能够在您导航到的所有屏幕中都有标签栏。因为选项卡与 tabActivity 相关,这意味着它与正常活动完全分开。因此,要让您的选项卡在所有页面中可见,您必须替换视图,从而保持在同一个 tabActivity 中。

所以第一步是获取下一个要显示为视图的活动并将其添加到选项卡中。这就是活动组要做的事情。这是一个很好的例子来说明如何理解 ActivityGroup。

活动组示例

为了使这更容易,引入了片段。它与活动组执行相同的操作(替换视图)。这里有几个例子,

http://android.codeandmagic.org/2011/07/android-tabs-with-fragments/

http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.html

于 2012-06-21T06:38:28.167 回答