java文件:屏幕变量的问题〜我在OnListItemClick方法中需要它,但只在执行游标操作并将值赋给tpid之后。我尝试声明公开没有帮助的两种方法。此外,我尝试在单独的类中执行数据库操作,但是当我通过按钮OnClick从片段调用此活动时,它显示错误,即使在将ListActivity扩展到新类之后也无法将新类强制转换为ListActivity类型。
package utkarsh.project1;
import android.app.Application;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
public class ViewActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
SQLiteDatabase db=openOrCreateDatabase("exp",MODE_APPEND,null);
TableRow tr;
String q="Select TripID from exp";
Cursor c=db.rawQuery(q,null);
String tpid="";
while(c.moveToNext())
{
tpid=c.getString(0)+",";
}
db.close();
String screens[]={tpid};
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,screens);
setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
if(screens[position].equals("EXIT"))
{
finish();
}
else
{
Toast.makeText(this, "Clicked on: " + screens[position], Toast.LENGTH_SHORT).show();
String str="utkarsh.project1."+screens[position];
try
{
Class c= Class.forName(str);
Intent i = new Intent(this,c);
startActivity(i);
}
catch (Exception e)
{
Toast.makeText(this,"Screen not yet designed",Toast.LENGTH_SHORT);
}
}
}
}
答案 0 :(得分:0)
您可以在listView上设置 onClickListener ,而不是扩展 listActivity 只需扩展活动,然后在的onCreate()强>
ListView listview1 = (ListView) findViewById(R.id.listview1);
listview1.setOnItemClickListener(
new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View view,
int position, long id) {
*//Do whatever you want here*
}
}
);
答案 1 :(得分:0)
您可以使用getItem(int position)
类的Adapter
方法获取所选值。您不需要访问screens
变量,因为它已经用于支持数据适配器。
答案 2 :(得分:0)
你有很多错误......
ArrayAdapter
基本逻辑:构造函数ArrayAdapter(Context context, int item_layout, T[] objects)
表示:适配器/列表视图中的每个项目都具有布局item_layout
,并且必须包含TextView
,其ID为@android:id/text1
1}} ArrayAdapter
的内部代码所需要的。您可以使用Complext布局并通过其他构造函数指定TextView
id,例如ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
,您可以在其中使用Complext布局但必须具有ID为TextView
的{{1}}。 textViewResourceId
的每个元素都绑定到适配器中的相应项,并且适配器项中的objects
设置为TextView
的文本。objects[index].toString()
您使用onCreate
作为纯文本字符串screens
,这是"id1,id2,id3,..."
无法理解的。根据上述逻辑,您的ArrayAdapter
应该是一个字符串数组,如screens
。["id1", "id2", "id3", ...]
绑定到适配器项,您可以通过screens
在onItemClickListener
中获取字符串。String screenItemText = ((TextView) view.findViewById(android.R.id.text1)).getText();
移动到SQLiteDatabase db=openOrCreateDatabase("exp",MODE_APPEND,null);
到后台线程。 String screens[]=xxxx;
是一种简单而有效的解决方案。