#android
#Android
Вопрос:
После долгих исследований и поиска уроков я пришел, чтобы найти ответы на некоторые вопросы, которые у меня были самостоятельно. Теперь, мой последний вопрос таков: если у меня есть View
переменная экземпляра, перенесенная с предыдущей Activity
, и она не работает для уточнения findViewbyId()
функции до текущего исходного файла, что я должен использовать View
в качестве экземпляра my findViewById()
?
Вот код, который у меня есть:
public class login_fb extends Activity implements View.OnClickListener {
private static final String EMAIL = "email";
private static AccessToken accessToken = null;
private static boolean isLoggedIn = false;
private static String deduction = "";
private static String income = "";
private static CallbackManager callbackManager = CallbackManager.Factory.create();
private static boolean hasItemized = false;
private FireMissiles fireMissiles = new FireMissiles();
public void gotoRcpts (View view)
{
signIn( view );
}
public void getSuggestions(View view) throws ParserConfigurationException, ParseException, SAXException, IOException {
checkPermsOfStorage( this );
setContentView( R.layout.content_search );
Intent intent = Intent.makeMainActivity( lists.newComponentActivity().getComponentName() );
startActivity( intent );
lists listing = new lists(view, view.getContext()); //everything works to here.
listing.display( view ); // This is where I call the function below.
}
Вот вторая половина кода
public void display(View view)
{
// I feel the issue is here, but why can I get
listViewP = view.findViewById( R.id.view_personal );
listViewB = view.findViewById( R.id.view_business );
// now create an adapter class
Log.d("amp;amp;amp;amp;", String.valueOf(this.mpTitle.size()));
if (this.mpTitle != null amp;amp; listViewP != null) { //if I don't check for null, error
MyAdapter adapterP = new MyAdapter( this, listed_views, mpTitle, content_search, mContext);
listViewP.setAdapter( adapterP ); // here's where my error is.
}
if (this.mbTitle != null amp;amp; listViewB != null) { // if I don't check for null error
MyAdapter adapterB = new MyAdapter( this, listed_views, mbTitle, content_search, mContext);
listViewB.setAdapter( adapterB ); // here also there's an error.
}
}
Два ListView
s — это view_personal
, и view_business
.
Комментарии:
1.
private FireMissiles fireMissiles = new FireMissiles();
— Я ухожу отсюда!2. @ReazMurshed Я понял это прямо из документов Google для разработчиков
Ответ №1:
A View
— это компонент пользовательского интерфейса — при Activity
запуске вы обычно вызываете setContentView
onCreate
, передавая файл макета XML. Что это делает, так это создает все разные View
s в вашем файле макета, устанавливает их параметры и присваивает им такие вещи, как id
вы им указали.
Таким образом, вы получаете иерархию макетов с такими вещами, как a TextView
, который имеет id
of titleText
или что-то еще. Вы можете найти этот конкретный объект, вызвав findViewById()
a View
(обычно макет верхнего уровня), и он будет искать все его View
потомки в иерархии макетов, пока не найдет тот, который соответствует этому имени идентификатора.
Это View
все экземпляры, которые создаются, если вы уничтожите действие и воссоздадите его заново, у вас будет совершенно новый набор объектов просмотра. Таким образом, вы не сохраняете экземпляры (и вам определенно не следует пытаться!), И если вы перейдете к другому Activity
, вы определенно не увидите те же объекты просмотра снова.
Поэтому, когда вы вызываете findViewById
новое действие, используя то же id
, что и в предыдущем действии, вы не находите тот же экземпляр View
объекта — вы просто находите тот, которому присвоен тот же идентификатор. Вы можете повторно использовать идентификаторы, подобные этому, единственная проблема заключается в том, что если у вас более одного в одной и той же иерархии макетов findViewById
, вы найдете только первый, который соответствует.
Если вы получаете нулевые ссылки для listViewP
etc., у вас нет представления с этим идентификатором в вашем макете (или, по крайней мере, не под тем View
, к которому вы обращаетесь findViewById
). Если они существуют в другом Activity
, вы не можете получить к ним доступ — это действие не запущено, оно не существует. Если ActivityB
вы хотите что-то изменить ActivityA
, ему необходимо передать ему данные, поэтому ActivityA
он может с этим справиться.