我正在尝试从包含URL链接的db列获取数据;列名是db中的'goto'w /。我需要将它传递到我的ListView中的onItemClick Intent,以将网页加载到新的/下一个Activity中。
我不知道如何让它发挥作用。如果你能用解释显示代码修改,这对我学习非常有帮助。日Thnx!
REVISED:
我现在正在传递数据,但我的方法返回了错误的行ID。我修改了以下活动。任何帮助Plz。日Thnx
在我的活动中.onCreate(已修订):
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
// @Override
public void onItemClick(AdapterView<?> a, View v, int position,long id)
{
Object o = lv.getSelectedItem();
//Adapter_AC fullObject = (Adapter_AC)o;
String url = "gotoURL";
if(v != null) {
TextView tv = (TextView)lv.findViewById(R.id.dummy);
url = (String) tv.getTag();
}
Toast.makeText(List_AC.this, "Clicked: " + url, Toast.LENGTH_LONG).show();
Intent i = new Intent(List_AC.this, DocView.class);
i.putExtra("url", url);
startActivity(i);
}
});
我的适配器:
public class Adapter_AC extends SimpleCursorAdapter {
private Cursor dataCursor;
private LayoutInflater mInflater;
public Adapter_AC(Context context, int layout, Cursor dataCursor,
String[] from, int[] to) {
super(context, layout, dataCursor, from, to);
this.dataCursor = dataCursor;
mInflater = LayoutInflater.from(context);
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.label);
holder.text2 = (TextView) convertView.findViewById(R.id.listTitle);
holder.text3 = (TextView) convertView.findViewById(R.id.caption);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
dataCursor.moveToPosition(position);
int label_index = dataCursor.getColumnIndex("label");
String label = dataCursor.getString(label_index);
int title_index = dataCursor.getColumnIndex("title");
String title = dataCursor.getString(title_index);
int description_index = dataCursor.getColumnIndex("description");
String description = dataCursor.getString(description_index);
int goto_index = dataCursor.getColumnIndex("goto");
String gotoURL = dataCursor.getString(goto_index);
holder.text1.setText(label);
holder.text2.setText(title);
holder.text3.setText(description);
return convertView;
}
static class ViewHolder {
TextView text1;
TextView text2;
TextView text3;
}
}
答案 0 :(得分:1)
尝试使用setTag:
首先,我们设置标签:
...
holder.text3.setText(description);
holder.text3.setTag(gotoURL);
执行onClick事件时,获取标记:
public void onItemClick(AdapterView<?> a, View v, int position,long id)
{
...
String url = "";
if(v != null) {
TextView tv = (TextView)arg1.findViewById(R.id.caption);
url = (String) tv.getTag();
}
i.putExtra("url", url);
startActivity(i);
}
答案 1 :(得分:1)
在OnItemClickListener.onItemClick
方法中,有id
个参数,当您使用SimpleCursorAdapter
时,所选项目的id,即sqlite数据库中的_ID
列传递给id
参数,因此您可以使用此id
值从DB获取所选列。
以下是示例代码,希望它可以提供帮助。
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Cursor c = queryById(id);
// Get the url from DB.
String url = c.getString("url");
}
答案 2 :(得分:0)
您从错误的行中提取数据的原因是您错误地处理了convertView
参数。您只需将holder
设置为指向您设置的第一组TextView
个对象。我认为你的holder
概念是不必要的。丢失,每次都明确设置文本字段,使用我在上一个问题中提到的Cursor
。