2017-09-26 1 views
1

Ich mache eine app für meine website. Ich arbeite an einer einzigen Aktivität, MainActivity. Ich bin kein Android-Entwickler, der gerade lernt. Das Problem ist, ich habe eine Suche auf der Aktionsleiste meiner Hauptaktivität gemacht. Die Suchansicht kommt und ich kann Wörter darin eingeben. Aber als ich auf den Submit drückte, passiert nichts. Ich brauche das Ergebnis, um in derselben Aktivität zu sein. Hauptaktivität. Die Suchanfrage lädt eine Webseitensuche. Mein Menü ist R.menu.main und der Menüpunkt für die Suche ist R.id.action_search Bitte sagen Sie mir, was ich falsch mache. Hier ist mein Code für AndroidManifest.xmlandroid app suche auf aktionsbalken nicht ergebnis

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/> 
<uses-permission android:name="android.permission.CAMERA"/> 
android:hardwareAccelerated="true" 
<application android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="Bengalflora.in" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="Bengalflora.in" 
     android:theme="@style/AppTheme.NoActionBar" 
     android:launchMode="singleTop" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 

     <meta-data android:name="android.app.default_searchable" 
      android:value="com.mywebsite.mywebsite.MainActivity" 
      android:resource="@xml/searchable" /> 
     <meta-data 
      android:name="android.app.searchable" 
      android:value="com.mywebsite.mywebsite.MainActivity" 
      android:resource="@xml/searchable" /> 
    </activity> 
    <activity android:name=".Splash"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".Aboutus" 
     android:label="About us" 
     android:parentActivityName=".MainActivity" > 

     <!-- Parent activity meta-data to support 4.0 and lower --> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 
    </activity> 
</application> 

Hier ist meine Hauptaktivität

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener{ 
    private static final int REQUEST_INTERNET = 200; 
    private static final int TIME_INTERVAL = 1000; // # milliseconds, desired time passed between two back presses. 
    private long mBackPressed; 
    private ProgressBar mProgressBar; 

    private static final String target_url="https://bengalflora.in"; 
    private static final String target_url_prefix="bengalflora.in"; 
    private Context mContext; 
    private WebView mWebviewPop; 
    private FrameLayout mContainer; 
    WebView mwebView; 

    String mypage_error = "file:///android_asset/error/index.html"; 

    private static final String TAG = MainActivity.class.getSimpleName(); 
    private String mCM; 
    private ValueCallback<Uri> mUM; 
    private ValueCallback<Uri[]> mUMA; 
    private final static int FCR=1; 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent){ 
     super.onActivityResult(requestCode, resultCode, intent); 
     if(Build.VERSION.SDK_INT >= 21){ 
      Uri[] results = null; 
      //Check if response is positive 
      if(resultCode== Activity.RESULT_OK){ 
       if(requestCode == FCR){ 
        if(null == mUMA){ 
         return; 
        } 
        if(intent == null){ 
         //Capture Photo if no image available 
         if(mCM != null){ 
          results = new Uri[]{Uri.parse(mCM)}; 
         } 
        }else{ 
         String dataString = intent.getDataString(); 
         if(dataString != null){ 
          results = new Uri[]{Uri.parse(dataString)}; 
         } 
        } 
       } 
      } 
      mUMA.onReceiveValue(results); 
      mUMA = null; 
     }else{ 
      if(requestCode == FCR){ 
       if(null == mUM) return; 
       Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData(); 
       mUM.onReceiveValue(result); 
       mUM = null; 
      } 
     } 
    } 
    @SuppressLint({"SetJavaScriptEnabled", "WrongViewCast"}) 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     int Permission_All = 1; 
     String[] Permissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.MEDIA_CONTENT_CONTROL, Manifest.permission.CAMERA, }; 
     if(!hasPermissions(this, Permissions)){ 
      ActivityCompat.requestPermissions(this, Permissions, Permission_All); 
     } 

     // 
     mProgressBar = (ProgressBar) findViewById(R.id.pb); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     mwebView = (WebView) findViewById(R.id.myWebView); 
     assert mwebView != null; 
     WebSettings webSettings = mwebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setAllowFileAccess(true); 


     CookieManager cookieManager = CookieManager.getInstance(); 
     cookieManager.setAcceptCookie(true); 
     CookieManager.getInstance().setAcceptThirdPartyCookies(mwebView, true); 

     mwebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 
     mwebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
     mwebView.getSettings().setAppCacheEnabled(true); 
     mwebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     webSettings.setDomStorageEnabled(true); 
     webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); 
     webSettings.setUseWideViewPort(true); 
     webSettings.setSavePassword(true); 
     webSettings.setSaveFormData(true); 
     webSettings.setEnableSmoothTransition(true); 
     mwebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

     mwebView.getSettings().setAllowFileAccess(true); 
     if(Build.VERSION.SDK_INT >= 21){ 
      webSettings.setMixedContentMode(0); 
      mwebView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
     }else if(Build.VERSION.SDK_INT >= 19){ 
      mwebView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
     }else if(Build.VERSION.SDK_INT >=11 && Build.VERSION.SDK_INT < 19){ 
      mwebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
     } 
     mwebView.setWebViewClient(new Callback()); 
     mwebView.setWebViewClient(new CustomWebViewClient()); 

     mwebView.loadUrl("https://bengalflora.in/gallery/index.php"); 




     mwebView.setWebChromeClient(new WebChromeClient(){ 
      public void onProgressChanged(WebView view, int newProgress){ 
       // Update the progress bar with page loading progress 
       mProgressBar.setProgress(newProgress); 
       if(newProgress >= 90){ 
        // Hide the progressbar 
        mProgressBar.setVisibility(View.GONE); 
       } 
      } 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){ 
       mwebView.loadUrl(mypage_error); 
      } 



      //For Android 3.0+ 
      public void openFileChooser(ValueCallback<Uri> uploadMsg){ 
       mUM = uploadMsg; 
       Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
       i.addCategory(Intent.CATEGORY_OPENABLE); 
       i.setType("image/*"); 
       MainActivity.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FCR); 
      } 
      // For Android 3.0+, above method not supported in some android 3+ versions, in such case we use this 
      public void openFileChooser(ValueCallback uploadMsg, String acceptType){ 
       mUM = uploadMsg; 
       Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
       i.addCategory(Intent.CATEGORY_OPENABLE); 
       i.setType("image/*"); 
       MainActivity.this.startActivityForResult(
         Intent.createChooser(i, "File Browser"), 
         FCR); 
      } 
      //For Android 4.1+ 
      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){ 
       mUM = uploadMsg; 
       Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
       i.addCategory(Intent.CATEGORY_OPENABLE); 
       i.setType("image/*"); 
       MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), MainActivity.FCR); 
      } 
      //For Android 5.0+ 

      public boolean onShowFileChooser(
        WebView webView, ValueCallback<Uri[]> filePathCallback, 
        WebChromeClient.FileChooserParams fileChooserParams) { 
       if(mUMA != null){ 
        mUMA.onReceiveValue(null); 
       } 
       mUMA = filePathCallback; 
       Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       if(takePictureIntent.resolveActivity(MainActivity.this.getPackageManager()) != null){ 
        File photoFile = null; 
        try{ 
         photoFile = createImageFile(); 
         takePictureIntent.putExtra("PhotoPath", mCM); 
        }catch(IOException ex){ 
         Log.e(TAG, "Image file creation failed", ex); 
        } 
        if(photoFile != null){ 
         mCM = "file:" + photoFile.getAbsolutePath(); 
         takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); 
        }else{ 
         takePictureIntent = null; 
        } 
       } 
       Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); 
       contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); 
       contentSelectionIntent.setType("image/*"); 
       Intent[] intentArray; 
       if(takePictureIntent != null){ 
        intentArray = new Intent[]{takePictureIntent}; 
       }else{ 
        intentArray = new Intent[0]; 
       } 

       Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); 
       chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); 
       chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); 
       chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); 
       startActivityForResult(chooserIntent, FCR); 
       return true; 
      } 
     }); 
    } 

    //new code start 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     // Inflate the menu; this adds items to the action bar if it is present. 


     // 
     SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
     SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     Intent searchIntent = getIntent(); 
     String query = searchIntent.getStringExtra(SearchManager.QUERY); 
     if(Intent.ACTION_SEARCH.equals(searchIntent.getAction())) { 
      mwebView.loadUrl("http://google.co.in/?q="+query); 
     } 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()){ 
      case R.id.action_upload: 
       mwebView.loadUrl("https://xyz/uploadpage.php"); 
       return true; 
      case R.id.action_reload: 
       mwebView.reload(); 
       return true; 

      case R.id.action_about: 
       startActivity(new Intent(this, Aboutus.class)); 
       return true; 



      case R.id.action_exit: 
       finish(); 


     } 


     return super.onOptionsItemSelected(item); 
    } 

    ///////////////multiple permission code 
    public static boolean hasPermissions(Context context, String... permissions){ 

     if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M && context!=null && permissions!=null){ 
      for(String permission: permissions){ 
       if(ActivityCompat.checkSelfPermission(context, permission)!=PackageManager.PERMISSION_GRANTED){ 
        return false; 
       } 
      } 
     } 
     return true; 
    } 
    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_local) { 
      mwebView.loadUrl("http://xyz/index.php?/category/1&mobile=true"); 
     } else if (id == R.id.nav_spices) { 
      mwebView.loadUrl("http://xyz?/category/84&mobile=true"); 
     } else if (id == R.id.nav_vherbarium) { 
      mwebView.loadUrl("http://xyz/index.php?/category/36&mobile=true"); 
     } else if (id == R.id.nav_usersupload) { 
      mwebView.loadUrl("http://xyz/index.php?/category/user&mobile=true"); 
     } else if (id == R.id.nav_recent) { 
      mwebView.loadUrl("http://xyz/index.php?/recent_pics&mobile=true"); 

     } else if (id == R.id.nav_login) { 
      mwebView.loadUrl("http://xyz/identification.php?mobile=true"); 
     } else if (id == R.id.nav_register) { 
      mwebView.loadUrl("http://xyz/register.php?mobile=true"); 

     } else if (id == R.id.nav_contact) { 
      mwebView.loadUrl("http://xyz/contact/&mobile=true"); 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

    public class CustomWebViewClient extends WebViewClient { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon){ 
      // Do something on page loading started 
      // Visible the progressbar 
      mProgressBar.setVisibility(View.VISIBLE); 
     } 


     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){ 
      mwebView.loadUrl(mypage_error); 
     } 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView webView, String url) { 
      if(url.contains("something")) return true; 
      return false; //Default is to not override unless our condition is met. 
     } 
     public void onPageFinished(WebView webView, String url) { 


      String webUrl = webView.getUrl(); 
      System.out.println(webUrl); 
      if(url.startsWith("https://xyz/plugins/oAuth/auth.php?provider=Facebook&openid_identifier=&init_auth=1#_=_")) 
      { 
       String redirectUrl = "https://xyz/gallery/facloginapp.php"; 
       webView.loadUrl(redirectUrl); 
       return; 
      } 
      super.onPageFinished(webView, url); 
      mProgressBar.setVisibility(View.GONE); 
     } 
    } 
    public class Callback extends WebViewClient { 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){ 
      mwebView.loadUrl(mypage_error); 
     } 
    } 
    // Create an image file 
    private File createImageFile() throws IOException{ 
     @SuppressLint("SimpleDateFormat") String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "img_"+timeStamp+"_"; 
     File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     return File.createTempFile(imageFileName,".jpg",storageDir); 
    } 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event){ 
     if(event.getAction() == KeyEvent.ACTION_DOWN){ 
      switch(keyCode){ 
       case KeyEvent.KEYCODE_BACK: 

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
        if (drawer.isDrawerOpen(GravityCompat.START)) { 
         drawer.closeDrawer(GravityCompat.START); 
        } 

        else{ 

         if(mwebView.canGoBack()){ 
          mwebView.goBack(); 
         } 
         else if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis()) 
         { 
          super.onBackPressed(); 

         } 
         else { Toast.makeText(getBaseContext(), "Press back button once quickly to exit", Toast.LENGTH_SHORT).show(); } 

         mBackPressed = System.currentTimeMillis(); 





        } 
        return true; 
      } 
     } 
     return super.onKeyDown(keyCode, event); 
    } 



    @Override 
    public void onConfigurationChanged(Configuration newConfig){ 
     super.onConfigurationChanged(newConfig); 
    }} 

Antwort

0

Es gibt viele Implementierungen aber der gemeinsame ist einschließlich Suchansicht in der App-Leiste.

Erstellen Sie eine Menüressourcendatei mit Suchansicht darin.

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item 
    android:id="@+id/search" 
    android:title="Search" 
    app:showAsAction="always" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    /> 
</menu> 

dann in Aktivität oder ein Fragment Setup oncreateoptionsmenu und aufblasen den obigen Menüpunktes

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.main_menu, menu); 
    MenuItem item = menu.findItem(R.id.search); 
    SearchView searchview = (SearchView) item.getActionView(); 
    searchview.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      Log.d("hello", query); 
      msp_editor.putString("query", query); 
      msp_editor.commit(); 
      fetchData(query); 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      return false; 
     } 
    }); 
} 

durchsuchbare Konfiguration erstellen, indem Sie eine res/xml/searchable.xml Datei und erklärt Meta-Daten in Manifest-Datei erstellen, Sie können mehr Anweisungen zur Einrichtung von der offiziellen documentation bekommen, aber in dem obigen Code habe ich meine Implementierung der Suchansicht gegeben. Wenn der Benutzer eine Suchanfrage eingibt, nehme ich den Abfrage-Listener und übergebe die Abfrage an meinen Retrofit-API-Anruf.

+0

Ich habe Ihre Methode versucht, aber das Problem ist nichts passiert, wenn ich die Abfrage eintippe und abschicke. Ich brauche eine Abfrage, die mit einem Webview geladen werden soll. mwebView.loadUrl ("http://google.co.in/?q=" + Abfrage); kannst du bitte meine Hauptaktivität und auch das Android-Manifest überprüfen. Ich brauche Suchergebnis und Suche in derselben Aktivität, und die Abfrage sollte in webview geladen werden @ random aspirer – Subhanjan

+0

@Subhanjan Ich schlage vor, Sie die Anwendung zuerst zu debuggen, und lassen Sie mich nach dem Debuggen wissen. Upvote meine Antwort für die ganze Zeit, die ich herausnehmen werde und werde für Ihre Frage nehmen, wenn Sie es nicht selbst lösen können. –

Verwandte Themen