我的代码在我的Fragment Class中有效,但在我的List Adapter中没有:
<!DOCTYPE html>
<html>
<head>
<title>PHP - dependent dropdown list</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Modal Example</h2>
<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Select State and get bellow Related City</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="title">Select State:</label>
<select name="state" class="form-control">
<option value="">--- Select State ---</option>
<?php
require('db_config.php');
$sql = "SELECT * FROM demo_state";
$result = $mysqli->query($sql);
while($row = $result->fetch_assoc()){
echo "<option value='".$row['id']."'>".$row['name']."</option>";
}
?>
</select>
</div>
<div class="form-group">
<label for="title">Select City:</label>
<select name="city" class="form-control" style="width:350px">
</select>
</div>
<button type="submit">submit</button>
</div>
</div>
</div>
</div>
<script>
$( "select[name='state']" ).change(function () {
var stateID = $(this).val();
if(stateID) {
$.ajax({
url: "ajaxpro.php",
dataType: 'Json',
data: {'id':stateID},
success: function(data) {
$('select[name="city"]').empty();
$.each(data, function(key, value) {
$('select[name="city"]').append('<option value="'+ key +'">'+ value +'</option>');
});
}
});
}else{
$('select[name="city"]').empty();
}
});
</script>
</div>
</body>
</html>
当我需要将此代码放入List List中时,&#39; getApplicationContext&#39;部分是&#34;错误&#34;。如何解决此问题并在我的列表适配器中使用此代码。 (班级在&#39; Tab2&#39;),
答案 0 :(得分:1)
你可以
将context
传递给您的adapter's
构造函数或,
从context
中使用的views
开始adpater
。
要在活动中夸大布局,您需要
Activity
上下文而非 ApplicationContext !!
答案 1 :(得分:0)
您可以将ApplicationContext
的引用传递给列表适配器:
new ListAdapter(getActivity().getApplicationContext(), anotherArgs);
顺便说一下,您可以从任何View类中获取Context
,我确信您的适配器可以访问父视图类来创建行项目视图。
答案 2 :(得分:0)
您必须将活动上下文作为参数传递给适配器的构造函数,并将其分配给本地上下文变量。
例如:
public class CustomAdapter extends ArrayAdapter<YourModelclass> {
private ArrayList<YourModelclass> list;
Context mContext;
public CustomAdapter(ArrayList<YourModelclass> list, Context context) {
this.list = list;
this.mContext=context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) { }
在上面的代码中,您可以使用本地上下文,然后访问任何方法。
这是因为,
片段始终映射到活动,因此可以在Fragment类中访问GetActivity方法。
GetActivity返回一个Activity上下文,该上下文可以访问GetApplicationContext方法
但是在适配器中,GetActivity没有任何意义,因为它没有绑定到某个活动,也没有绑定到它的父活动。
希望这有帮助!!!
答案 3 :(得分:0)
你可以用两种方式做到这一点
从您的活动或片段或,
context
传递给您的Adapter's
构造函数
从context
中使用的views
获取adpater
。您可以直接从视图中查询上下文,例如viewObject.getContext().getApplicationContext()
还要记住,如果你需要膨胀视图,你将需要Activity的上下文,因为应用程序上下文在那里不起作用。每个上下文(Activity,application,baseContext等)都有不同的职责,并提供不同的设施。你必须根据需要选择。 这也是非常基本的事情。你必须学习android组件中的基本上下文用法。