我定义了以下代码,以便能够在特定位置设置文本。
<div class="primary_nav_wrap">
<ul>
<li class="current-menu-item"><a href="#">Home</a>
</li>
<li>
<a href="#">Menu 1</a>
<div class="sub_divsavedfun" id="Functions_1-5">
<ul>
<li><a href="#">Sub Menu 1</a>
</li>
<li><a href="#">Sub Menu 2</a>
</li>
<li><a href="#">Sub Menu 3</a>
</li>
<li>
<a href="#">Sub Menu 4</a>
<ul>
<li>
<a href="#">Deep Menu 1</a>
<ul>
<li><a href="#">Sub Deep 1</a>
</li>
<li><a href="#">Sub Deep 2</a>
</li>
<li><a href="#">Sub Deep 3</a>
</li>
<li><a href="#">Sub Deep 4</a>
</li>
</ul>
</li>
<li><a href="#">Deep Menu 2</a>
</li>
</ul>
</li>
<li><a href="#">Sub Menu 5</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
我想要检查位置是否等于0,然后如果是,则在位置p上设置文本 - 每次它的位置+ 1(下一个位置)。 我们是否能够将文本从持有者设置为文本视图,但是在某个位置。
感谢。
答案 0 :(得分:7)
我认为您仍在使用ListView,如果不是,请更新问题标题。
在getView(int position, View convertView, ViewGroup parent)
方法中,检查要为其创建视图的位置。既然你已经在使用holder,我假设你在提取持有者之前已经完成了(convertView!= null)检查。
在getView(int position,View convertView,ViewGroup parent)中,您可以检查
if (position == 0) {
holder.text.setText("blah");
} else {
holder.text.setText("");
}
请记住,else部分是必需的,因为视图往往会被重用,因此您的早期“blah”需要重置,否则在您的视图滚动时将在其他视图中可见。
有关视图重用方式的详细说明,您可以查看其中的great talk Romain Guy,它解释了有关ListView的所有内容。
答案 1 :(得分:3)
首先,您需要在Adapter中实现自己的RecyclerView.Adapter,您需要实现onBindViewHolder()方法,您可以根据位置指定文本。
当位置为0时,您将获得一些文本并将其保存到String字段中,当位置为1时,您可以相应地设置该TextView的文本。
public class CustomAdapter extends RecyclerView.Adapter {
private String tempText;
...
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(position == 0) {
tempText = "bla";
}else if (position == 1){
holder.text.setText(tempText);
}
}
}
答案 2 :(得分:1)
请注意!使用RecycleView,他使每个操作的所有视图无效,并具有缓存视图的机制。 更改视图可能会产生问题!
更好的解决方案,它使用您自己的适配器。 或者,最佳解决方案,它使用适配器执行此任务 - LinkedListView。与RecycleView一样,也可以随时支持更改视图。
答案 3 :(得分:1)
您需要更新列表数据在getView()方法中,不要担心位置,因为它会自动增加。
public class ViewHolder
{
TextView text;
}
public View getView(final int position, View rView, ViewGroup parent)
{
currentPosition = position;
rowView =rView;
if(rowView == null)
{
LayoutInflater inflater = LayoutInflater.from(context);
rowView= inflater.inflate(R.layout.list_item_layout, null);
viewHolder = new ViewHolder();
viewHolder.text= (TextView) rowView.findViewById(R.id.textView);
rowView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) rowView.getTag();
}
if(position==0){
viewHolder.text.setText("your Text");
}
else if(position==1){
viewHolder.text.setText("your Text 1");
}
notifyDataSetChanged();//this will update your views
}
答案 4 :(得分:0)
在CustomAdapter.class中添加此代码
<Component Guid="3B413DBB-603B-42BA-80A6-BA8ED5216ACE" Id="FornetDB" Directory="DirIIS" KeyPath="yes">
<sql:SqlScript BinaryKey="SQLCreateScript" ExecuteOnInstall="yes" SqlDb="MasterDB" Id="CreateScript" />
</Component>
<sql:SqlDatabase Database="Master"
Server="TUSHAR"
Instance="SQLSERVER2008R2"
Id="MasterDB"
></sql:SqlDatabase>
在您的MainActivity.class
中点击textview并更改值
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolder holder = new ViewHolder();
holder.txtDetails = (TextView) vi.findViewById(R.id.txt_expenses_details);
holder.txtDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
vi.setTag(holder);
return vi;
}
单击列表视图并更改值 (或)
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
long viewId = view.getId();
if (viewId == R.id.txt_expenses_details) {
((TextView)view).setText("Hey, I've just been tapped on!");
customListAdapter.notifyDataSetChanged();
}
}
});
答案 5 :(得分:0)
我认为在特定位置设置文本的方法是错误的。更好的代码实践是改变数据。假设您的数据结构类似于 -
class MyData{
public String status;
}
ArrayList<MyData> adapterList;
现在,如果您有适用于适配器的MyData列表,并且您想要更改第5个数据,那么请执行此操作 -
private void updatePostion(positionToChange = 5){
for(int i = 0; i < adapterList.size(); i++)
adapterList.get(i).status = "";
adapterList.get(positionToChange).status = "blah";
notifyDataSetChanged();
}
希望它会对你有所帮助:)。