Контекстное меню в WebView

Интерфейс, диалоги, темы, стили, меню
Ответить
justmoment
Сообщения: 2
Зарегистрирован: 10 фев 2014, 22:16

Контекстное меню в WebView

Сообщение justmoment » 10 фев 2014, 22:27

Здравствуйте. Помогите, пожалуйста, как вывести контекстное меню в браузере (он открывается через WebView). Не могу найти ошибку, просмотрела уже много разных статей и перепробовала много вариантов. Увы, ни один не заработал как надо. Спасибо.

Код: Выделить всё

public class BrowserActivity extends Activity {
	WebView webbrowser;
	
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
  // super.setLongClickable(true);
  // WebView webbrowser = new WebView (this);
    setContentView(R.layout.browser);
      
    webbrowser = (WebView) findViewById(R.menu.items);
    registerForContextMenu(webbrowser);
    };
  // чтобы ссылки открывались внутри WebView
 private class HelloWebViewClient extends WebViewClient 
  {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) 
      {
          view.loadUrl(url);
          return true;
      }
  }
 @Override
 public void onCreateContextMenu(ContextMenu menu, View v,
		   ContextMenuInfo menuInfo)  {
	  super.onCreateContextMenu(menu, v, menuInfo);
		   MenuInflater inflateLayout = getMenuInflater();
		   inflateLayout.inflate(R.menu.items, menu);
		 }  
 
		 public boolean onOptionsItemSelected(MenuItem item) {
		   switch (item.getItemId()) {
		   case R.id.add:
		    Toast.makeText(this, "Выбран пункт Добавить в коллекцию", 1000).show();
		    showDialog(1);
			   break;
		      case R.id.back:
		    Toast.makeText(this,"Вы вернулись к предыдущему экрану", 1000).show();
		    break;
		  }
		   return super.onOptionsItemSelected(item);
		 } 
		 
		 @Override
		 protected Dialog onCreateDialog(int id) {
		     return DialogFactory.getDialogById(1, this);
		 }
}
Вложения
Collection.rar
Исходный код проекта
(1.45 МБ) 157 скачиваний

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Контекстное меню в WebView

Сообщение klblk » 11 фев 2014, 05:49

четно, лучше бы не смотрел...)
1. контекстное меню - удел прошлого десятилетия, используйте альтернативы (кнопочки на ActionBar'е например), вызывать диалоги таким способом, тоже не очень хорошо;
2. не нашёл в приложении где запускается ваша BrowserActivity, пришлось запускать самому
3. при longClick меню открывается, но не обрабатывается... так как не тем методом пытаетесь обрабатывать (onOptionsItemSelected -> onContextItemSelected):
[syntax=java]public class BrowserActivity extends Activity {

WebView webbrowser;
Menu menu;

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

// webbrowser = (WebView) findViewById(R.menu.items); //че за хреть то? :)
webbrowser = (WebView) findViewById(R.id.webView);
registerForContextMenu(webbrowser);

};

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflateLayout = getMenuInflater();
inflateLayout.inflate(R.menu.items, menu);
// this.menu=menu;
// return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
Toast.makeText(this, "Выбран пункт Добавить в коллекцию",
Toast.LENGTH_LONG).show();
showDialog(1);
break;
case R.id.back:
Toast.makeText(this, "Вы вернулись к предыдущему экрану",
Toast.LENGTH_LONG).show();
break;
}
return super.onContextItemSelected(item);
}

@Override
protected Dialog onCreateDialog(int id) {
return DialogFactory.getDialogById(1, this);
}

}[/syntax]
4. Если работаете в эклипсе наживайте для автоформатирования кнопочки (ctrl+shift+f), а то эти ступеньки в коде ужасны... (ощущение, что код в блокноте набирался)
5. Не хардкорте строки, прописывайте все в strings.xml
6. <action android:name="android.intent.action.MAIN" /> в манефесте у 3 активити, зачем? ну и имена активити MainActivity и Main2Activity... не надо так.
...//тут еще пару десятков пунктов, но не таких важных

не показывайте такой код никому больше... некрасивый он, пишите красиво)

но плюсы тоже есть... проект нормально экспортировался, без ошибок=)

п.с. не в коем случае не хотел обидеть, просто объективная критика

justmoment
Сообщения: 2
Зарегистрирован: 10 фев 2014, 22:16

Re: Контекстное меню в WebView

Сообщение justmoment » 11 фев 2014, 19:12

Спасибо за критику. Уж лучше сейчас буду учиться писать красивый код, пока только начинаю.
Спасибо за идею с ActionBar, буду думать в этом направлении и менять все что натворила.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Контекстное меню в WebView

Сообщение klblk » 12 фев 2014, 02:39

justmoment писал(а):Спасибо за критику. Уж лучше сейчас буду учиться писать красивый код, пока только начинаю.
Спасибо за идею с ActionBar, буду думать в этом направлении и менять все что натворила.
Поддержка ActionBar начинается с api 11+, для более старых версий придется подключать библиотеку SherlockActionBar или android-support-v7-appcompat

Ответить