小编Bar*_*ara的帖子

Android - Activity vs. ListActivity - 我的活动类应该扩展哪一个?

我一直在学习在Android中开发,并且有一个更普遍的问题:如果我有一个使用列表和其他一些视图的布局,我应该在Activity类中使用Activity还是ListActivity?

我知道ListActivity可能会更容易覆盖特定于列表的事件,但使用ListActivity而不是Activity有什么其他优势吗?如果我想将来的布局更改为GridView怎么办?更改课程代码会更难/更少吗?

我只是对这方面的"最佳实践"感到好奇以及所带来的好处,所以任何答案都会有所帮助:)

巴拉

android listactivity android-activity

29
推荐指数
2
解决办法
2万
查看次数

Android - 存储从网络下载的图像

我有一个问题是关于我是否应该(以及如何)存储从网络加载的图像.假设我从我的Android应用程序调用Web服务.在这个Web服务中,我获得了Web上图像的URL.我下载并在ListView中列表项的左侧显示此图像.我的问题是,我应该使用什么方法来存储图像?我是不是该:

  1. 将其保存到SDCard,检查创建ListView时是否存在(在后续请求中)并根据需要重新下载(偶尔更新图像,以防它发生变化).
  2. 使用Context.getCacheDir()将其存储在缓存中,但可能会被迫更频繁地重新下载,因为我无法依赖缓存中的图像.
  3. 始终下载它,从不存储图像.

图像文件本身相当小,但我希望一些用户可以下载/存储这些小图像.哪种方法效果最好,和/或什么是首选方法?

作为一个附带问题,我应该首先加载我的ListView中的所有图像(并且可能会锁定UI一段时间)或者异步加载它们,但同时显示占位符图形(可能更"丑陋")?这里的标准是什么?

storage android caching sd-card

14
推荐指数
1
解决办法
1万
查看次数

我在选择Yii作为我的PHP框架时做出了正确的选择吗?

我即将开始开发一个新的网站,并一直在研究PHP框架.我不是一个高级的PHP开发人员,但我已经开发了几年的网站和应用程序(在asp.net中).

我的网站主要是基于AJAX(使用jQuery)并且大量调用Web服务.经过一些研究,这是我想出的:

CakePHP:最初开始在此开发,但发现它太复杂了.事实上,它迫使你使用和学习所有这些新东西只是为了使用它有点令人生畏,所以我暂时把它放在一边.

Zend:框架的性能让我有点怀疑,但我听说它对创建Web服务有很大的支持.我也听说它有点复杂.

CodeIgniter:没有使用这个的真正原因.基于我读过的CodeIgniter和Yii非常相似,但Yii有点快,并且没有PHP4不需要的代码(因为我计划在PHP5中专门开发).

至于Yii,唯一令我害怕的是它比其他框架更新,所以它有一个较小的社区.它似乎也没有大量的Web服务支持(只有SOAP,根据我的理解)而不是Zend.

所以我的问题归结为:

  1. 这些事情会让我担心吗?(不是社区大,网络服务支持不佳)
  2. 还有什么我应该研究的吗?
  3. 对于主要基于AJAX的Web应用程序,我对其他框架的选择是否可以?

巴拉

php jquery frameworks yii

12
推荐指数
2
解决办法
5194
查看次数

Android - 使用ArrayAdapter一次向ListView添加和显示项目

我正在使用ArrayAdapter将项目添加到自定义ListView并在我的Android应用程序中显示结果.我遇到的问题是ArrayAdapter在显示视图之前似乎要等到所有项目都在其中.也就是说,当我将项添加到ArrayAdapter并调用notifyDataSetChanged时,它不会更新ListView以显示添加的项.它等待直到添加所有项目并在显示项目之前调用GetView.

我希望它能够在将项目添加到ListView后立即显示该项目.这可能吗?

我相信相关的代码如下:

r_adapter = new ReminderAdapater(Activity_ContentSearch.this, R.layout.search_listitem, myList);
listView.setAdapter(r_adapter);
...
r_adapter.notifyDataSetChanged();
r_adapter.clear();
for(int i = 0; i < myList.size(); i++)
{
    r_adapter.add(myList.get(i));
    r_adapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,即使我在add方法之后调用notifyDataSetChanged,它实际上也不会更新视图.在完成上面的循环之后,视图最终被更新(基于我所知道的,这是因为在完成代码的这一部分之后才调用GetView).

我试图覆盖我的自定义ArrayAdapter的add方法,没有运气,因为我无法访问该方法中的视图.

欢迎任何帮助:)

巴拉

android listview android-arrayadapter android-listview android-asynctask

11
推荐指数
1
解决办法
3万
查看次数

接受List <CustomObject>的ASP.NET Web方法失败,"Web服务方法名称无效".

我想创建一个接受自定义对象列表的Web方法(通过jQuery/JSON传入).

当我在本地运行网站时,一切似乎都有效.jQuery和ASP.NET,每个人都很高兴.但当我把它放在我们的一台服务器上时,它会爆炸.在ajax请求之后,jQuery获得500错误,响应为:

System.InvalidOperationException:EditCustomObjects Web服务方法名称无效.

这是Web服务方法:

[WebMethod]
public void EditCustomObjects(int ID, List<CustomObject> CustomObjectList)
{
  // Code here
}
Run Code Online (Sandbox Code Playgroud)

我的jQuery代码(我觉得不重要,因为错误似乎发生在Web服务级别):

var data = JSON.stringify({
  ID: id,
  CustomObjectList: customObjectList
});

$.ajax({
  type: "POST",
  url: "/manageobjects.asmx/EditCustomObjects",
  data: data,
  contentType: "application/json; charset=utf-8",
  async: false,
  dataType: "json",
  success: function(xml, ajaxStatus) {
    // stuff here
  }
});
Run Code Online (Sandbox Code Playgroud)

customObjectList初始化如下:

var customObjectList = [];
Run Code Online (Sandbox Code Playgroud)

我像这样添加项目(通过循环):

var itemObject = { 
  ObjectTitle = objectTitle,
  ObjectDescription = objectDescription,
  ObjectValue = objectValue
}

customObjectList.push(itemObject);
Run Code Online (Sandbox Code Playgroud)

那么,我在这里做错了吗?有没有更好的方法将数据数组从jQuery传递到ASP.NET Web服务方法?有没有办法解决"Web服务方法名称无效".错误?

仅供参考,我在Windows Server 2003机器上运行.NET 2.0,我从这个站点获得了上述代码:http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax …

asp.net jquery web-services asmx invalidoperationexception

6
推荐指数
1
解决办法
1万
查看次数

Android:notifyDataSetChanged()在方向更改后不更新listview

我有一个半复杂的问题,希望有人能够帮助我.

在单击事件上,我创建一个线程并基于方法启动长时间运行的操作.在长时间运行的任务完成后,它会回调到另一种方法,它不后的处理程序:

@Override
public void contentSearchModelChanged(Model_ContentSearch csm, ArrayList<Class_Reminder> newRemindersList) {
    remindersList = newRemindersList;
    mHandler.post(mUpdateDisplayRunnable);
}
Run Code Online (Sandbox Code Playgroud)

哪个叫Runnable:

// post this to the Handler when the background thread completes
private final Runnable mUpdateDisplayRunnable = new Runnable() {
  public void run() {
    updateDisplay();
  }
};
Run Code Online (Sandbox Code Playgroud)

最后,这是我的updateDisplay()方法正在做的事情:

private void updateDisplay() {
    if (csModel.getState() != Model_ContentSearch.State.RUNNING) {
        if(remindersList != null && remindersList.size() > 0){
                r_adapter = new ReminderAdapater(Activity_ContentSearch.this, remindersList, thisListView);
                thisListView.setAdapter(r_adapter);
                r_adapter.notifyDataSetChanged();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我正常地这样做时,这很好用.不过,如果我更改方向的长时间运行的操作运行时,这是行不通的.它确实使回调正确,并且remindersList确实包含项目.但是当它达到这条线时:

r_adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

什么都没发生.奇怪的是,如果我做的另一项提交并使其再次运行全过程(不改变方向),它实际上更新视图两次,一次为前下一个提交又一次.所以一旦与第一结果视图更新提交,然后再次与第二提交第二次以后的结果.因此,适配器DID获取数据,它只是不刷新视图.

我知道这与方向改变有关,但我不能为我的生活找出原因.有人可以帮忙吗?或者,任何人都可以建议一种处理方向更改线程的替代方法吗?

巴拉

multithreading android listview orientation android-arrayadapter

6
推荐指数
1
解决办法
3万
查看次数