Я считаю, что лучше всего проверить, добавлен ли фрагмент перед вызовом метода в фрагменте. Сделайте что-то подобное, чтобы избежать нулевого исключения.
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
fragment.<specific_function_name>();
}
Попробовав все предложения от @Adeel и @Matthias Schmidt, я заметил, что у меня все еще была та же проблема. Сценарий не добавлял class="active"
или class='active'
вместо этого, он добавлял class
, но когда вы изменили его на другое, он добавил. Поэтому я переопределил класс active
на mynewactive
, и он согласился добавить class="mynewactive"
blue
указывает, что цвет .active
, цвет red
- .step-done
, а цвет green
- обычный цвет без какого-либо дополнительного класса.
Добавить событие click только на li.active
, например .nav-tabs li.active a
. $(this).parent()
означает текущий родительский тег, который является li
, потому что обработчик события имеет место на якоре a
и использует .next()
, чтобы найти следующего родственника текущего элемента. Для более подробной проверки jQuery .next ()
Пожалуйста, проверьте ниже фрагмент кода:
$(document).on('click', '.nav-tabs li.active a', function() {
$(this).parent().removeClass("active");
$(this).parent().addClass("step-done");
$(this).parent().next().addClass('active');
});
.nav-tabs {
list-style: none;
}
.nav-tabs li {
display: inline-block;
background: #5fba7d; // green color
margin: 0 10px;
padding: 10px;
color: white;
}
.nav-tabs li a {
cursor: pointer;
}
li.active {
background: #0095ff; // blue color
}
li.step-done {
background: #dc3d4c; // red color
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active">
<a aria-controls="select-room"><span class="mg-bs-tab-num">1</span><span class="mg-bs-bar"></span>Select Room</a>
</li>
<li role="presentation" class="">
<a aria-controls="personal-info"><span class="mg-bs-tab-num">2</span><span class="mg-bs-bar"></span>Personal Info</a>
</li>
<li role="presentation">
<a aria-controls="payment"><span class="mg-bs-tab-num">3</span><span class="mg-bs-bar"></span>Payment</a>
</li>
<li role="presentation">
<a aria-controls="thank-you"><span class="mg-bs-tab-num">4</span>Thank You</a>
</li>
</ul>
Вот мой подход к этому, я надеюсь, что он делает то, что вы хотите. Он удаляет класс active
из первого элемента этого класса, обменивает его с классом step-done
, а затем добавляет класс active
к следующему шагу - он должен работать для всех четырех шагов.
$('#advance').click(function(){
var active = $(".nav-tabs .active:first");
active.removeClass("active");
active.addClass("step-done");
active.next("li").addClass("active");
});
.active{
background:yellow;
}
.step-done{
background:lime;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active">
<a aria-controls="select-room"><span class="mg-bs-tab-num">1</span><span class="mg-bs-bar"></span>Select Room</a>
</li>
<li role="presentation" class="">
<a aria-controls="personal-info"><span class="mg-bs-tab-num">2</span><span class="mg-bs-bar"></span>Personal Info</a>
</li>
<li role="presentation">
<a aria-controls="payment"><span class="mg-bs-tab-num">3</span><span class="mg-bs-bar"></span>Payment</a>
</li>
<li role="presentation">
<a aria-controls="thank-you"><span class="mg-bs-tab-num">4</span>Thank You</a>
</li>
</ul>
<button id="advance">Advance Step</button>