小编Big*_*216的帖子

ListView更新单行

一旦按下按钮,我想用不同的内容更新列表视图中的单行.我知道我可以使用notifydatasetchanged()但这会更新整体listView.

我已经阅读了这个答案,它非常适合我想做的事情.

我已经完成了5行的列表视图,当我按下按钮时,我想用不同的文本更新第4行.我不想以编程方式设置文本,因为这只是一个虚拟项目,只是为了查看是否可以刷新单行,而我的真实项目比仅仅更复杂textview.

所以我的问题是:我可以getView()用来更新一行listview吗?

这是我的代码:

我的活动:

public class MainActivity extends Activity {

    public ListView list1;
    public listAdapter adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list1 = (ListView) findViewById(R.id.my_list);
        adapter = new listAdapter(this);
        list1.setAdapter(adapter);

        Button button1 = (Button) findViewById(R.id.my_button);
        button1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                adapter.setText("Different text");
                View row2Update = list1.getChildAt(3);
                list1.getAdapter().getView(3, row2Update, list1);

            }
        });

    } 

}
Run Code Online (Sandbox Code Playgroud)

我的适配器:

public class listAdapter extends BaseAdapter{

    public …
Run Code Online (Sandbox Code Playgroud)

java android

5
推荐指数
1
解决办法
1163
查看次数

回调参考旧片段的方法

我有一个包含Fragment的片段活动,Fragment启动一个下载一些数据的Asynctask,我在Fragment中实现了一个回调方法,它更新了适配器和listview中的一些值.我遇到的问题如下:这是我的onCreateView方法(重要部分):

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    list=(PullToRefreshListView)v1.findViewById(R.id.listapull);
    adapterList=new ListViewAdapter(secciones, mContext);
}
Run Code Online (Sandbox Code Playgroud)

当我在AsyncTask运行时旋转设备时,doInBackground()方法继续运行,然后在执行后它触发侦听器并在我的片段中启动回调方法,此方法具有我的适配器和列表视图的旧引用: 在此输入图像描述

当方向发生变化并且这是正确的时,会重新创建片段及其内容,但有没有人知道为什么回调方法保持对适配器和listview的引用,以及在方向更改之前创建的位置?

编辑:

我有一个执行asynctask的按钮,如下所示:

asyncRefresh = new PullRefreshTask(taskContext, mContext, secciones);
asyncRefresh.setUpdatePull2RefreshListener(this);
asyncRefresh.execute();
Run Code Online (Sandbox Code Playgroud)

如果用户按下按钮,asyncTask会将旧的Fragment设置为侦听器,并且当asynctask运行时发生方向更改时,我认为激活的回调方法是新创建的片段方法中的方法,但我不确定了.

编辑2:

我已经解决了我的问题,正如我在第一次编辑中所说的那样,旧的片段正在调用回调方法.所以我所做的是将我的asynctask保存在另一个名为"Info"的类中的变量中,并在创建视图中我这样做:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        list=(PullToRefreshListView)v1.findViewById(R.id.listapull);
        adapterList=new ListViewAdapter(secciones, mContext);
        PullRefreshTasktask task = Info.getAsyncTask();
        asyncRefresh =  task;
        asyncRefresh.setUpdatePull2RefreshListener(this);
    }
Run Code Online (Sandbox Code Playgroud)

这样我就可以在我的片段中设置片段的新引用

setUpdatePull2RefreshListener()

运行asynctask的方法

android

5
推荐指数
1
解决办法
1027
查看次数

标签 统计

android ×2

java ×1