对于我的主/详细列表片段,我在尝试根据列表项的位置查找替换详细信息片段的代码时遇到了严重问题。基于需要替换的代码(顶线)我认为顶线需要更改为其他内容。因此,根据我的代码,有谁知道该行可以替换为什么?所有相关的帮助将不胜感激。我想要实现的行为就像主细节流程中的行为一样,如果仅在双窗格模式下,细节片段将替换为选择列表项的片段。如果在单窗格模式下,所选列表项将打开一个活动。
需要更换的代码(第一行)
FragmentLineChooserList newFragment = new FragmentLineChooserList();
FragmentTransaction transaction = FragmentWCLine.this.getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detail_container, newFragment);
transaction.commit();
FragmentWCLine.java
public class FragmentWCLine extends android.support.v4.app.Fragment {
public final static String EXTRA_MESSAGE = "Station_key";
private class WC {
private CharSequence station;
private CharSequence zone;
private Class<? extends Activity> activityClass;
private Class<? extends android.support.v4.app.Fragment> fragmentClass;
public WC(int stationResId, int zoneResId, Class<? extends Activity> activityClass, Class<? extends android.support.v4.app.Fragment> fragmentClass) {
this.fragmentClass = fragmentClass;
this.activityClass = activityClass;
this.station = getResources().getString(stationResId);
this.zone = getResources().getString(zoneResId);
}
@Override
public String toString() { return station.toString(); }
public String getzone(){ return zone.toString(); }
}
private static WC[] mWC;
/**
* Whether or not the activity is in two-pane mode, i.e. running on a tablet
* device.
*/
private boolean mTwoPane;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_wc_line, container, false);
// Instantiate the list of stations.
mWC = new WC[]{
new WC(R.string.bank, R.string.zone_1, WCBankActivity.class, FragmentWCBank.class),
new WC(R.string.wat, R.string.zone_1, WCWATActivity.class, FragmentWCWAT.class)
};
final ListView listView = (ListView)v.findViewById(R.id.list_wc);
listView.setAdapter(new MyAdapter(getActivity(), mWC));
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(mTwoPane){
startActivity(new Intent(getActivity(), mWC[position].fragmentClass));
FragmentLineChooserList newFragment = new FragmentLineChooserList();
FragmentTransaction transaction = FragmentWCLine.this.getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detail_container, newFragment);
transaction.commit();
setItemNormal();
View rowView = view;
setItemSelected(rowView);
}
else{
Intent intent = new Intent(this, mWC[position].activityClass);
String station = mWC[position].station;
intent.putExtra(EXTRA_MESSAGE, station);
startActivity(intent);
}
}
public void setItemSelected(View view){
View rowView = view;
view.setBackgroundColor(Color.parseColor("#66CCCC"));
TextView tv0 = (TextView)rowView.findViewById(R.id.list_item_station);
tv0.setTextColor(Color.parseColor("#000099"));
TextView tv1 = (TextView)rowView.findViewById(R.id.list_item_zone);
tv1.setTextColor(Color.parseColor("#000099"));
}
public void setItemNormal()
{
for (int i=0; i< listView.getChildCount(); i++) {
View v = listView.getChildAt(i);
v.setBackgroundColor(Color.TRANSPARENT);
TextView tv0 = ((TextView) v.findViewById(R.id.list_item_station));
tv0.setTextColor(Color.WHITE);
TextView tv1 = ((TextView) v.findViewById(R.id.list_item_zone));
tv1.setTextColor(Color.parseColor("#B5B5B5"));
}
}
});
return v;
}
static class MyAdapter extends BaseAdapter {
static class ViewHolder {
TextView station;
TextView zone;
}
LayoutInflater inflater;
WC[] mWC;
public MyAdapter(Context contexts, WC[] samples) {
this.mWC = samples;
inflater = LayoutInflater.from(contexts);
}
@Override
public int getCount() {
return mWC.length;
}
@Override
public Object getItem(int position) {
return mWC[position];
}
@Override
public long getItemId(int position) {
return 0;
}
/**set selected position**/
private int selectPosition = -1;
public void setSelectPosition(int position){
if(position!=selectPosition){
selectPosition = position;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item_dualline, null);
viewHolder = new ViewHolder();
viewHolder.station = (TextView) convertView.findViewById(R.id.list_item_station);
viewHolder.zone = (TextView) convertView.findViewById(R.id.list_item_zone);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.station.setText(mWC[position].station);
viewHolder.zone.setText(mWC[position].getzone());
//change item color
if(position==selectPosition){
//change item background
convertView.setBackgroundColor(Color.parseColor("#000099"));
//change text color
viewHolder.station.setTextColor(Color.parseColor("#000099"));
}else {
}
return convertView;
}
}
}
WCBankActivity
public class WCBankActivity extends ActionBarActivity {
public final static String EXTRA_MESSAGE = "Station_key";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_wc_bank);
if (savedInstanceState == null) {
// Get the message from the intent
Intent intent = getIntent();
// Notice to specify the sender Activity for the message
String station = intent.getStringExtra(WCBankActivity.EXTRA_MESSAGE);
FragmentWCBank newFragment = new FragmentWCBank();
FragmentTransaction transaction = this.getSupportFragmentManager().beginTransaction()
transaction.replace(R.id.detail_container, newFragment);
transaction.commit();
}
}
}
FragmentWCBank
public class FragmentWCBank extends android.support.v4.app.Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_wc_bank, container, false);
return v;
}
}
错误
答案 0 :(得分:1)
目前,我发现变量module Main where
import Debug.Trace
import Network.HTTP.Affjax
import Control.Monad.Aff
import Control.Monad.Eff
import Control.Monad.Eff.Exception
errorHandler :: forall e. Error -> Eff (trace :: Trace | e) Unit
errorHandler err = print err
successHandler :: forall e. AffjaxResponse String -> Eff (trace :: Trace | e) Unit
successHandler res = print res.response
main = runAff errorHandler successHandler (get "http://www.myApi.com/api" )
永远不会改变。关于您的问题,代码mTwoPane
和与之相关的代码对我来说没问题。
FragmentTransaction transaction = FragmentWCLine
的热门代码。这可能不正确,需要代码:
FragmentTransaction transaction = FragmentMainList
注意:
建议的代码,更清洁:
FragmentTransaction transaction = FragmentWCLine
注意:在片段中,getActivity()应该有效。这样您就不需要指定代码所在的片段类。
答案 1 :(得分:1)
我想我现在明白了。你真正想要的是......开始另一个活动并立即启动预期的片段,这对其他人来说会更清楚。要在另一个活动中显示正确的片段,您应该在该活动中执行此操作。有一个很好的Google网页@ Starting Another Activity。以下是该网页的代码示例,使用您发布的代码。
代码示例:
<强> WCBankActivity.java:强>
// Define this for Intent, mainly keep the key consistent between 2 activities
public final String EXTRA_MESSAGE = "Station_key";
<强> FragmentWCLine.java:强>
if (mTwoPane) {
...
}
else {
Intent intent = new Intent(this, mWC[position].activityClass);
String station = mWC[position].station;
intent.putExtra(WCBankActivity.EXTRA_MESSAGE, station);
startActivity(intent);
}
在其他活动中, WCWATActivity 。 java ,如果我理解正确的话:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
// Get the message from the intent
Intent intent = getIntent();
// Notice to specify the sender Activity for the message
String station = intent.getStringExtra(WCBankActivity.EXTRA_MESSAGE);
...
FragmentLineChooserList newFragment = new FragmentLineChooserList();
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detail_container, newFragment);
transaction.commit();
}
}
注意:
EXTRA_MESSAGE
。在WCBankActivity类中定义此常量final。onCreate
()中,将电台作为信息获取并处理。getActivity().getSupportFragmentManager()
代替FragmentWCLine.getActivity()。